2011-05-15 21 views
7

böyle bir işlevi döndüren bir işlev tanımlarsanız:çağrılması Clojure yüksek dereceden fonksiyonlar

(defn add-n 
    [n] 
    (fn [x] (+ x n))) 

Sonra bir sembole sonucu atayabilirsiniz:

(def add-1 (add-n 1)) 

ve diyoruz:

(add-1 41) 
;=> 42 

(add-n 1) sonucunu yeni bir sembole atamadan nasıl arayabilirim? Aşağıda, bu çıktı üretir:

(println (add-n 1)) 
#<user$add_n$fn__33 [email protected]> 
nil 

#<user$add_n$fn__33 [email protected]> oluşturulan işlev için bir iç referanstır.

cevap

16

Kolay: Gördüğün

(println ((add-n 1) 41)) 

çıkışı bir işlev tanımıdır. Yuvarlak köşeli parantezler arasına koymak ve bir parametre eklemek onu aramak için yeterlidir.