2012-09-19 28 views
5

Tôi có vectơ chức năng (def my-func [a b c d]). Mỗi hàm lấy đầu ra của hàm cuối làm đầu vào. Tôi muốn tạo một đầu vào thông qua chúng, làm cách nào để làm điều đó?luồng qua một vectơ chức năng

Làm cách nào để truy cập vào biểu mẫu sau (-> in a b c d)?

Cảm ơn, Murtaza

Trả lời

5

Bạn có thể sử dụng comp nhưng lưu ý nó thực hiện các chức năng phải sang trái

((comp d c b a) 10) 

hoặc

((apply comp my-fns) 10) 

sẽ vượt qua 10 đến hàm đầu tiên, kết quả cho hàm tiếp theo, v.v.

+0

Cảm ơn vì giải pháp thanh lịch Thợ rèn. – murtaza52

+0

Bạn được chào đón. Có một hàm khác, ['juxt'] (http://clojuredocs.org/clojure_core/clojure.core/juxt) lấy một số hàm làm đối số và áp dụng các đối số cho mỗi hàm trả về một vectơ kết quả' ((juxt + - * /) 3 2) => [5 1 6 3/2] ' –

5

Tôi nghĩ rằng bạn có thể sử dụng reduce chức năng:

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

Cảm ơn dAni, đó là một cách tuyệt vời! – murtaza52

+0

Điều này nhắc tôi nhớ về những gì @fogus đang nói đến trong [Thrush in Clojure] (http://blog.fogus.me/2010/09/28/thrush-in-clojure-redux/) –

Các vấn đề liên quan