【发布时间】:2009-07-16 17:02:25
【问题描述】:
为什么我在以下 Clojure 函数中出现堆栈溢出:
(defn length
[xs]
(if ,(not= xs nil)
(println (+ 1 (length (rest xs))))
(println 0)))
【问题讨论】:
-
你不要在 StackOverflow 上谈论堆栈溢出。大声笑
-
-
不知道 clojure,但是当 xs 只有 1 个元素时,“rest xs”会返回 nil 吗?还是会返回一个空列表/字符串/任何不是零的东西?
-
我认为堆栈只是因为预期的原因而溢出。 Clojure 不会自动优化尾调用(虽然这不是尾调用,但可以轻松地将其重写为一个)。
-
我也很难相信这是在函数式语言中实现长度函数的最佳方式,对我来说它看起来非常糟糕。