在clojure中,调用reduce *en empty collection返回1.这是非常令人惊讶的.
我在创建阶乘函数时做了这个发现,定义如下:
(defn factorial [n] (reduce * (take-while #(> % 0) (iterate dec n))))
Run Code Online (Sandbox Code Playgroud)
(factorial 0)正确返回1,没有我必须为零编写一个特殊情况.怎么会 ?
检查代码*并+显示这两个函数通过返回操作的标识来实现0-arity大小写.在*代码的情况下(删除了dosctring和元数据):
(defn *
([] 1)
([x] (cast Number x))
([x y] (. clojure.lang.Numbers (multiply x y)))
([x y & more]
(reduce1 * (* x y) more)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |