繁体   English   中英

将函数序列映射到序列

[英]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是一个带有两个参数的函数; mapseq1的第一个元素和seq2的第一个元素传递给f ,然后是每个元素的第二个元素等。一旦任何参数seq用完, map停止,所以这也适用于无限序列。
  • 考虑使用向量而不是引用列表。 向量突出显示为“数据”而不是“代码”,您不必引用它们。
  • 您的示例函数不能执行您想要的操作; 两者都返回1.我怀疑你的意思是#(+ % 1)#(- % 1) 这两个都在clojure.core ,分别称为incdec

所以:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM