假设我有 2 个函数 add1 和 sub1,定义如下。根据这些函数,我创建了一个向量函数列表。
(defn add1
[x]
(+ x 1))
(defn sub1
[x]
(- x 1))
(def funclist (vec '(add1 sub1)))
现在假设在此函数列表中,我想运行如下所示的 map
(map #(% 3) funclist)
这给了我
=> (nil nil)
我在期待(4 2)...
。我做错了什么?
我是一个十足的 Clojure 菜鸟...仅供引用
-阿部
最佳答案
您使用 '
将函数转换为符号。
(map #(type %) funclist) ;; => (clojure.lang.Symbol clojure.lang.Symbol)
然而,符号也是函数。它们可用于像 get
一样进行查找。
因此,nil
结果:
('inc 42)
; → nil
改变
(def funclist (vec '(add1 sub1)))
至
(def funclist (vector add1 sub1)) ;; or [add1 sub1]
它会起作用的。
(map #(% 3) funclist) ;;=> (4 2)
关于function - Clojure:在函数列表上的单个值上运行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66214941/