clojure-defn模式匹配

clojure-defn模式匹配,clojure,Clojure,我对clojure非常陌生,我想模拟clojure的+,我写了如下内容: (defn sum ([] 0) ([x & xs] (+ x (sum xs)))) (sum 1 2 3 4) ; ERROR 这是不对的,就像在哈斯克尔,我会写 sum' :: [Int] -> Int sum' [] = 0 sum' (x:xs) = x + sum' xs clojure代码有什么问题?谢谢 正确答案如下: (defn sum ([] 0) ([x &a

我对clojure非常陌生,我想模拟clojure的
+
,我写了如下内容:

(defn sum
  ([] 0)
  ([x & xs] (+ x (sum xs))))
(sum 1 2 3 4) ; ERROR
这是不对的,就像在哈斯克尔,我会写

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

clojure代码有什么问题?谢谢

正确答案如下:

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

您使用一个参数(一个列表)调用函数,因此反复使用第二种情况,直到超过递归深度。

啊,我明白了。谢谢!