2015-04-24 24 views

回答

7

问题是'(+ - * /)是一个符号列表,而不是函数列表。符号实现了AFn,并且当提供两个参数时,函数将尝试在第一个参数(此处为2)中查找符号,并在查找失败时返回第二个参数(此处为5)。

+1

这是对我的问题更深入的回答,补充了@bsvingen提供的解决方案。 – user40129

4

有Clojure中没有你想要的正是一个功能:juxthttp://clojuredocs.org/clojure.core/juxt

所以,你的例子是

(def funcs (juxt + - * /)) 
(funcs 2 5) 

如果有人想出了一个很好的解释了为什么map方法不工作我也想听到。

11

这工作:(map #(% 2 5) [+ - * /])

这不:(map #(% 2 5) '[+ - * /])

也没有这样的:(map #(% 2 5) '(+ - * /))

的原因是,当你做'(+ - * /),你得到的符号列表+, - *和/而不是它们所指的功能 - 报价也适用于列表的值。

使用矢量可以避免这个问题。

如果您绝对想要一个列表,请执行(map #(% 2 5) (list + - * /))