[英]Map sequence of functions to a sequence
如何將函數序列中的每個函數映射到值序列中的相應值?:
(map '(sequence of functions) '(sequence of values))
函數序列中的第n個函數應該應用於值序列中的第n個值。 對不起,如果我不是很清楚。
例如,說(def fns '(#(+ 1 %) #(- 1 %)) )
那么(map (some-clever-function-of fns) '(0 0))
會產生(1 -1)因為#(+ 1 %)
被映射到第一個0而#(- 1 %)
被映射到第二個。
map
多個參數序列,它將完全符合您的要求。 (map f seq1 seq2)
期望f
是一個帶有兩個參數的函數; map
將seq1
的第一個元素和seq2
的第一個元素傳遞給f
,然后是每個元素的第二個元素等。一旦任何參數seq用完, map
停止,所以這也適用於無限序列。 #(+ % 1)
和#(- % 1)
。 這兩個都在clojure.core
,分別稱為inc
和dec
。 所以:
user> (map (fn [f x] (f x))
[inc dec]
[0 0])
(1 -1)
要么:
user> (map #(%1 %2) [inc dec] [0 0])
(1 -1)
我通常定義一個invoke
函數,其作用類似於apply
但沒有list-collapsing:
(defn invoke [f & args]
(apply f args))
(map invoke [+ -] [1 2] [3 4])
(4 -2) ; 1 + 3, 2 - 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.