我在 lisp 中编写了一个递归减法函数,但是当我加载它并使用数字运行该函数时,例如 ( subtract 4 3 )
输出是 -3
我不明白为什么。
(defun subtract (x y)
(if (eq y 0)
x
(- 1 (subtract x (- y 1) ) ) ) )
最佳答案
首先,不要使用eq
来比较数字。它在这种情况下意外起作用,因为您的数字恰好很小。使用 =
,或者(因为您正在寻找零)zerop
。
其次,您可以使用 (trace subtract)
查看调用和返回值的踪迹。
第三,(- 1 x)
和 (- x 1)
在一般情况下具有非常不同的值。
关于recursion - 递归减法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41180789/