clojure定义模式匹配

我对clojure真的很陌生,我想从clojure模拟+ ,我写了这样的东西:

(defn sum
  ([] 0)
  ([x & xs] (+ x (sum xs))))
(sum 1 2 3 4) ; ERROR

这是不正确的,就像在Haskell中,我可以写

sum' :: [Int] -> Int
sum' [] = 0
sum' (x:xs) = x + sum' xs

clojure代码有什么问题? 谢谢!


正确的如下:

(defn sum
    ([] 0)
    ([x & xs] (+ x (apply sum xs))))

你用一个参数,一个列表调用函数,从而一次又一次地触发第二种情况,直到超过递归深度。

链接地址: http://www.djcxy.com/p/82577.html

上一篇: clojure defn pattern matching

下一篇: Clojure Type Hints for High Order Functions