【问题标题】:clojure defn pattern matchingclojure defn 模式匹配
【发布时间】:2016-05-14 13:55:52
【问题描述】:

我对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 代码有什么问题?谢谢!

【问题讨论】:

    标签: clojure


    【解决方案1】:

    正确的应该是这样的:

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

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

    【讨论】:

    • 啊,我明白了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2012-12-27
    相关资源
    最近更新 更多