2012-09-19 2 views
5

나는 함수 벡터 (def my-func [a b c d])을 가지고 있습니다. 각 함수는 마지막 함수의 출력을 입력으로 사용합니다. 나는 그들을 통해 입력을 스레드 싶어요, 어떻게합니까?함수 벡터를 통한 스레딩

다음 양식을 작성하려면 어떻게해야합니까? (-> in a b c d)?

감사합니다, Murtaza

답변

5

당신은 comp를 사용하지만이 기능이 오른쪽에서 왼쪽으로 실행 인식 할 수

((comp d c b a) 10) 

또는

((apply comp my-fns) 10) 

은 첫 번째 함수에 10을 전달하고 다음 함수에 결과를 전달합니다.

+0

우아한 해결책을 가져 주셔서 감사합니다 스미스. – murtaza52

+0

당신은 오신 것을 환영합니다. 여러 함수를 인수로 취하고 각 함수에 인수를 적용하여 결과 벡터를 반환하는 다른 함수 ['juxt'] (http://clojuredocs.org/clojure_core/clojure.core/juxt)가 있습니다. (juxt + - * /) 3 2) => [5 1 6 3/2]' –

5

난 당신이 reduce 기능을 사용할 수 있다고 생각 :

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

감사합니다. dAni, 멋진 방법입니다. – murtaza52

+0

이것은 @ Fogus가 [Clojure의 Thrush] (http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/)에서 말하는 내용을 상기시켜줍니다. –

관련 문제