【发布时间】:2014-07-04 10:33:00
【问题描述】:
我正在尝试实现我自己的 Clojure 'or' 宏(称为 'my-or')。到目前为止,我得到了:
(defmacro my-or
[& args]
(let [[x xs] (seq args)]
`(if ~x ~x (my-or ~xs))))
但是,调用这个函数时,例如:
(my-or false 4 3)
这会导致 StackOverflowError。我很欣赏我写的东西是递归的,但是导致错误的函数到底是什么?顺便说一句,我还查看了 clojure.core 库中“或”的官方实现,所以我知道一个可行的解决方案。
(也许尾递归在这里是相关的?不确定。)
谢谢
丹尼尔
【问题讨论】: