(def ops '(+ - * /))
(map #(% 2 5) ops)
Run Code Online (Sandbox Code Playgroud)
给
(5 5 5 5)
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义.为什么这会返回5的列表而不是函数调用的结果?
bsv*_*gen 12
这有效: (map #(% 2 5) [+ - * /])
这不是: (map #(% 2 5) '[+ - * /])
这也不是: (map #(% 2 5) '(+ - * /))
原因是当你这样做时'(+ - * /),你得到一个符号+, - *和/的列表,而不是它们引用的函数 - 引用也适用于列表的值.
使用矢量可以避免这个问题.
如果你绝对想要一个清单,那就做吧(map #(% 2 5) (list + - * /)).
问题是这'(+ - * /)是一个符号列表,而不是一个函数列表.符号实现AFn,当提供两个参数时,该函数尝试在第一个参数(2此处)中查找符号,5如果查找失败则返回第二个参数(此处).