Function Clojure:在函数列表上的单个值上运行map

Function Clojure:在函数列表上的单个值上运行map,function,dictionary,vector,clojure,Function,Dictionary,Vector,Clojure,假设我有两个函数add1和sub1,定义如下。通过这些函数,我创建了一个向量函数列表 (defn add1 [x] (+ x 1)) (defn sub1 [x] (- x 1)) (def funclist (vec '(add1 sub1))) 假设现在在这个函数列表上,我想运行一个映射,如下所示 (map #(% 3) funclist) 这给了我 => (nil nil) 我期待着(42)…。我做错了什么 我是个彻头彻尾的笨蛋。。。仅供参考 -Abe您使用

假设我有两个函数add1和sub1,定义如下。通过这些函数,我创建了一个向量函数列表

(defn add1
  [x]
  (+ x 1))

(defn sub1
  [x]
  (- x 1))

(def funclist (vec '(add1 sub1)))
假设现在在这个函数列表上,我想运行一个映射,如下所示

(map #(% 3) funclist)
这给了我

=> (nil nil)
我期待着
(42)…
。我做错了什么

我是个彻头彻尾的笨蛋。。。仅供参考


-Abe

您使用
将函数转换为符号

(map #(type %) funclist) ;; => (clojure.lang.Symbol clojure.lang.Symbol)
然而,符号也是功能。它们可用于查找,如
get
。 因此,
nil
结果:

('inc 42)
; → nil
改变

(def funclist (vec '(add1 sub1)))

它会起作用的

(map #(% 3) funclist) ;;=> (4 2)

您可以使用内置功能完成类似的操作:

(让[所有FN(juxt inc dec)]
;=>(所有fns 42)=>[43 41]

一个警告:
juxt
有点晦涩难懂,一个简单的方法可能会更好地解决大多数问题(并且更容易让未来的读者理解)。

非常感谢Aaron。这将大大有助于我理解Clojure。
(map #(% 3) funclist) ;;=> (4 2)