Clojure,用一系列函数进行映射

时间:2014-04-24 23:57:03

标签: clojure functional-programming

对clojure来说是新手,所以也许我会以完全错误的方式解决这个问题,但有没有办法做这类事情?

(地图(周期[+ - ])[1 1 1] [1 1 1])

在这个例子中,我希望它返回; (2 0 2)

感谢下面的帮助,解决方案是:

(map (fn [a b c] (a b c)) (cycle [+ -]) [1 1 1] [1 2 3])

(map #(%1 %2 %3) (cycle [+ -]) [1 1 1] [1 2 3])

简称

2 个答案:

答案 0 :(得分:3)

map的第一个参数需要是一个将应用于集合的每个元素的函数。你所拥有的是一个函数向量。所以你需要的是一个函数,它将向量的每个元素应用到其他向量中的相应元素。像这样:

(map #(%1 %2 %3) (cycle [+ -]) [1 1 1] [1 1 1])

答案 1 :(得分:3)

是 -

(map #(%1 %2 %3) (cycle [+ -]) [1 1 1] [1 1 1])
;;(2 0 2)

#是匿名函数的简写,%是传递的参数的编号。所以你只是在对抗map  (+ 1 1)(- 1 1)(+ 1 1)