我是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代码有什么问题?谢谢!
答案 0 :(得分:3)
正确如下:
(defn sum
([] 0)
([x & xs] (+ x (apply sum xs))))
您正在使用一个参数(列表)调用该函数,因此一遍又一遍地触及第二种情况,直到超出递归深度。