将函数序列映射到序列

Hen*_*gon 4 function clojure map sequence

如何将函数序列中的每个函数映射到值序列中的相应值?:

(map '(sequence of functions) '(sequence of values))
Run Code Online (Sandbox Code Playgroud)

函数序列中的第n个函数应该应用于值序列中的第n个值.对不起,如果我不是很清楚.

例如,说 (def fns '(#(+ 1 %) #(- 1 %)) )

然后(map (some-clever-function-of fns) '(0 0))会产生(1 -1)因为#(+ 1 %)被映射到第1 0和#(- 1 %)第2.

Bri*_*per 10

  • 传递map多个参数序列,它将完全符合您的要求. (map f seq1 seq2)期望f是一个带有两个参数的函数; map将传递to 的第一个元素seq1和第一个元素,然后是每个元素的第二个元素,等等.一旦任何seq参数用完,就停止,所以这也适用于无限序列.seq2fmap
  • 考虑使用向量而不是引用列表.向量突出显示为"数据"而不是"代码",您不必引用它们.
  • 您的示例函数不能执行您想要的操作; 两者都返回1.我怀疑你的意思#(+ % 1)#(- % 1).这两个分别在clojure.core,被称为incdec.

所以:

user> (map (fn [f x] (f x)) 
           [inc dec] 
           [0 0])
(1 -1)
Run Code Online (Sandbox Code Playgroud)

要么:

user> (map #(%1 %2) [inc dec] [0 0])
(1 -1)
Run Code Online (Sandbox Code Playgroud)