[]如何在Clojure中的函数中工作?

时间:2015-12-24 23:09:06

标签: clojure

[]如何在Clojure中的函数中工作?

(def square (fn [x] (* x x)))
(square 10) ; -> 100

据我所知,我们在x的位置传递了10。难道我不能做到以下几点吗?

(def square (fn [x y] (* x y)))
(square 5 10) ; -> 50

2 个答案:

答案 0 :(得分:4)

在Clojure中,[]用于表示参数列表。也就是说,square中定义的匿名函数只接受一个参数并将其与自身相乘。

您可以绝对对此进行扩展,但您可能希望更改该功能的名称,以更好地反映其实际所做的事情。

(def multiply (fn [x y] (* x y)))

答案 1 :(得分:0)

Makoto's answer的一些评论。

您无需命名函数即可使用它:

((fn [x] (* x x)) 10) ; 100

((fn [x y] (* x y)) 5 10) ; 50

匿名函数经常被用作高阶函数的参数,例如map

Clojure(和其他Lisps)将函数作为一个事物的行为与命名它的行为分开。 def命名。名称的后续def将删除/删除/覆盖之前的名称。

你也不需要解释一个函数来命名它。而不是

(def multiply (fn [x y] (* x y)))

写一下

(def multiply *)

在保罗格雷厄姆的On Lisp中有一个可爱的解释(对于Common Lisp)。