首页 > 解决方案 > Clojure:在函数列表上的单个值上运行映射

问题描述

假设我有 2 个函数 add1 和 sub1,定义如下。从这些函数中,我创建了一个向量 funclist。

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

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

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

假设现在在这个函数列表中,我想运行如下地图

(map #(% 3) funclist)

这给了我

=> (nil nil)

我期待着(4 2)...。我究竟做错了什么?

我是一个完整的 Clojure 菜鸟……仅供参考

-安倍

标签: functiondictionaryvectorclojure

解决方案


您将函数转换为带有'.

(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)

推荐阅读