[英]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.