sou*_*eck 102
一般情况下,您可以使用的非交换案例适用:
(defn sum [& args] (apply + args))
Run Code Online (Sandbox Code Playgroud)
由于加法是可交换的,所以这样的东西也应该起作用:
(defn sum [& args] (reduce + args))
Run Code Online (Sandbox Code Playgroud)
&
导致args
绑定到参数列表的其余部分(在这种情况下是整个列表,因为左边没有任何内容&
).
显然定义这样的总和是没有意义的,因为而不是:
(sum a b c d e ...)
Run Code Online (Sandbox Code Playgroud)
你可以写:
(+ a b c d e ....)
Run Code Online (Sandbox Code Playgroud)
小智 30
Yehoanathan提到arity重载但没有提供直接的例子.这是他在谈论的内容:
(defn special-sum
([] (+ 10 10))
([x] (+ 10 x))
([x y] (+ x y)))
Run Code Online (Sandbox Code Playgroud)
(special-sum)
=> 20
(special-sum 50)
=> 60
(special-sum 50 25)
=> 75
har*_*man 17
(defn my-sum
([] 0) ; no parameter
([x] x) ; one parameter
([x y] (+ x y)) ; two parameters
([x y & more] ; more than two parameters
(reduce + (my-sum x y) more))
)
Run Code Online (Sandbox Code Playgroud)
vie*_*bel 10
defn
是一个宏,使定义函数更简单.Clojure支持在单个函数对象,自引用和变量arity函数中使用的arity重载&
来自http://clojure.org/functional_programming
归档时间: |
|
查看次数: |
44723 次 |
最近记录: |