2012-09-19 17 views
5

(def my-func [a b c d]) işlevlerinin bir vektörüne sahibim. Her fonksiyon, son fonksiyonun çıkışını giriş olarak alır. Onları bir girişten geçirmek istiyorum, bunu nasıl yaparım?işlevlerinin bir vektöründen geçirilmesi

Aşağıdaki form için (-> in a b c d)'a nasıl ulaşırım?

sayesinde Murtaza

cevap

5

Sen comp kullanmak ama işlevleri sağdan sola yürütür farkında olabilir

((comp d c b a) 10) 

veya

((apply comp my-fns) 10) 

, ilk işleve 10 sonucu, sonraki işleve vb.

+0

Zarif çözüm için teşekkürler Smith. – murtaza52

+0

Bir şey değil. Başka bir işlev vardır, ['juxt'] (http://clojuredocs.org/clojure_core/clojure.core/juxt) argüman olarak bir dizi işlevi alır ve her bir işleve argümanları uygular. (juxt + - * /) 3 2) => [5 1 6 3/2] ' –

5

Sana reduce işlevini kullanabilirsiniz düşünüyorum:

(def fns [inc inc inc]) 
(reduce (fn [v f] (f v)) 10 fns) 
+0

Teşekkürler dAni, bu harika bir yol! – murtaza52

+0

Bu, @fogus'un [Thrush in Clojure] hakkında konuştuğunu hatırlatıyor (http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/) –

İlgili konular