lisp - 我的 LISP 函数如何成为未绑定(bind)变量?

标签 lisp common-lisp

我在 LISP 中定义了一个函数,它定义正确。但是每当我尝试调用它时,我都会收到一条错误消息,提示“变量 FACTORIAL 未绑定(bind)”。

我已经在 OS X 和 Windows 7 的 LispWorks 和 Allegro 上尝试过这个。函数是——

(defun factorial (x)
   (if (= 1 x) 1
       (* x factorial (- 1 x))))

感谢任何帮助。

最佳答案

在代码的第三行,您将 x 乘以 factorial 乘以 1-x

首先要注意的是 factorial 不是一个变量:它是一个函数。由于 Common-Lisp 是 Lisp-2,所以阶乘根本没有被绑定(bind)为变量——它被绑定(bind)为函数。

您需要在小于 x 的情况下调用 factorial 函数,而不是 x 小于 1。

所以:

(defun factorial (x)
   (if (= 1 x) 1
       (* x (factorial (- x 1)))))

……应该这样做。

关于lisp - 我的 LISP 函数如何成为未绑定(bind)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605453/

相关文章:

在 lisp 中重构 "show-list"函数

lisp - Lisp 中的空列表是从 cons 单元构建的吗?

scheme - 将元素插入列表列表中子列表的开头

compilation - 使用 ASDF 获取单个文件的编译结果

macros - 如何用另一个 s 表达式包装并执行一个 lisp s 表达式?

lisp - defparameter vs defun 用于传递函数

clojure - 为什么这个递归函数将一个空集合传递给 `take` ?

lisp - 与欧拉项目 72 (lisp) 有关的奇怪问题

lisp - 如何在 lisp 中存储就地连接

lisp - CCL 保存应用程序,Clisp Saveinitmem,问题