recursion - 递归减法不起作用

标签 recursion lisp clisp

我在 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/

相关文章:

command-line - 在 Common Lisp 中获取命令行参数

macros - 在 Lisp 中,作为 push 是对 cons 的追加是什么?

lisp - 类似于图形但具有不同类型边的数学对象的名称是什么?

lisp - defvar、defparameter、setf 和 setq 之间有什么区别

algorithm - 面试题: Buy and sell stocks to maximize profit with constraint of not buying once you sell

recursion - F# 中可以递归部分函数应用吗?

c++ - 多线程递归任务同步

javascript - 循环无限嵌套对象并构造字符串

lisp - 将参数从文本文件传递给 Lisp?

java - 从 Java 调用的 Lisp 代码