clojure defn模式匹配

时间:2016-05-14 13:55:52

标签: 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代码有什么问题?谢谢!

1 个答案:

答案 0 :(得分:3)

正确如下:

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

您正在使用一个参数(列表)调用该函数,因此一遍又一遍地触及第二种情况,直到超出递归深度。