Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何映射在其参数中添加5的函数?_Clojure_Lambda_Functional Programming - Fatal编程技术网

Clojure 如何映射在其参数中添加5的函数?

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

请帮我和Clojure一起离开地面。我已经搜索并阅读了,但我看到的只是如何使用函数
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])
非常感谢您提供的解决方案和参考资料!