Clojure 如何映射在其参数中添加5的函数?
请帮我和Clojure一起离开地面。我已经搜索并阅读了,但我看到的只是如何使用函数Clojure 如何映射在其参数中添加5的函数?,clojure,lambda,functional-programming,Clojure,Lambda,Functional Programming,请帮我和Clojure一起离开地面。我已经搜索并阅读了,但我看到的只是如何使用函数inc添加数字1 我试图理解map的基本知识。我只想将值5添加到集合中的每个元素。我尝试了许多不同的方法,但都没有成功。下面是一个可怜的不完整的尝试: (map (+ 5 ???) [0 1 2]) 这必须是幼稚的简单,但不是像我这样的非功能程序员 谢谢。映射的第一个参数是要应用于输入序列中每个元素的函数。您可以创建一个函数并提供它: (defn plus5 [x] (+ 5 x)) (map plus5 [0
inc
添加数字1
我试图理解map
的基本知识。我只想将值5
添加到集合中的每个元素。我尝试了许多不同的方法,但都没有成功。下面是一个可怜的不完整的尝试:
(map (+ 5 ???) [0 1 2])
这必须是幼稚的简单,但不是像我这样的非功能程序员
谢谢。映射的第一个参数是要应用于输入序列中每个元素的函数。您可以创建一个函数并提供它:
(defn plus5 [x] (+ 5 x))
(map plus5 [0 1 2])
如果你不想声明一个命名函数,你可以创建一个匿名的内联函数
(map (fn [x] (+ 5 x)) [0 1 2])
您可以将函数定义缩短为:
(map #(+ 5 %) [0 1 2])
(+5°?)
是一个表达式,而不是一个函数
(defn foo[x](+5 x))
是一个命名函数
(fn[x](+5x))
是一个匿名函数
#(+5%)
是编写匿名函数的一种更快的方法
这些行可以满足您的需要:
(map foo [0 1 2])
(map (fn [x] (+ 5 x)) [0 1 2])
(map #(+ 5 %) [0 1 2])
有时候,当我看一门我从未见过的语言时,我觉得它很有用。如果你搜索“函数”,你会找到一整节关于如何定义它们的内容。官方的Clojure文档中也有六个例子。这是针对Scala的,但打开它可以很好地解释map和reduce(左折)。使用部分应用程序(请参阅)创建一个函数,将5
添加到其参数中:
(partial + 5)
你可以自己试试:
user> ((partial + 5) 10)
;; => 15
现在将其映射到您的列表上:
user> (map (partial + 5) [0 1 2])
;; => [5 6 7]
非常感谢。中间一个是我的目标。另外:
(map(partial+5)[0 1 2])
非常感谢您提供的解决方案和参考资料!