function - Clojure:在函数列表上的单个值上运行映射

标签 function dictionary vector clojure

假设我有 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/

相关文章:

javascript - 用数组中的元素替换字符 "* "的实例 - JavaScript

function - 给定底坐标和高坐标,找到等腰三角形的最后一个坐标

css - Wordpress map 导致填充问题

java - 如何使用 MockMVC 测试 Spring Rest 中的 Map 参数

c++ vector of pairs of pointers 搞砸了

PHP:调用未定义的函数 gzdecode()

python - 将 for 循环转换为字典理解

c# - 你如何取向量的倒数?

c++ - std::map<k,v> 的集合必须有多大才能超过排序的 std::vector<std::pair<k,v>>?

c - 尽量使用函数好不好?