2012-09-19 14 views
5

Mam wektor funkcji (def my-func [a b c d]). Każda funkcja pobiera dane wyjściowe ostatniej funkcji jako dane wejściowe. Chcę przez nich przejść przez wątek, jak to zrobić?gwintowanie wektora funkcji

Jak przejść do następującego formularza (-> in a b c d)?

Dzięki Murtaza

Odpowiedz

5

Można użyć comp ale należy pamiętać, że wykonuje funkcje prawej do lewej

((comp d c b a) 10) 

lub

((apply comp my-fns) 10) 

przejdzie 10 do pierwszej funkcji, wynik do następnej funkcji i tak dalej.

+0

Dzięki za eleganckie rozwiązanie Kowal. – murtaza52

+0

Nie ma za co. Istnieje inna funkcja, ['juxt'] (http://clojuredocs.org/clojure_core/clojure.core/juxt), która przyjmuje szereg funkcji jako argumentów i stosuje argumenty do każdej funkcji zwracającej wektor wyników' ((juxt + - * /) 3 2) => [5 1 6 3/2] ' –

5

myślę, że można użyć reduce funkcję:

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

Dzięki dAni, to wspaniały sposób! – murtaza52

+0

To przypomina mi o tym, o czym mówił @fogus w [Thrush in Clojure] (http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/) –

Powiązane problemy