2016-05-14 76 views
2

我真的很新的Clojure,我想模擬從Clojure的+,我寫了這樣的事情:Clojure的DEFN模式匹配

(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代碼有什麼問題?謝謝!

回答

3

正確的將是如下:

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

你用一個參數,一個列表調用函數,從而一遍又一遍,直到擊中遞歸深度超過了第二種情況。

+0

啊,我明白了。非常感謝! – delta