[]如何在Clojure中的函数中工作?
(def square (fn [x] (* x x)))
(square 10) ; -> 100
据我所知,我们在x的位置传递了10。难道我不能做到以下几点吗?
(def square (fn [x y] (* x y)))
(square 5 10) ; -> 50
答案 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)。