【发布时间】:2016-08-01 09:41:09
【问题描述】:
我尝试查看相关问题,但找不到关于如何在 Common LISP 中定义变量的直接答案。我使用 sbcl 实现,并且一直在使用教程来帮助我学习语言,但出于某种原因,这段代码:
;;print a line many times
(setq xx 1)
(while (< xx 20)
(message "yay")
(setq xx (1+ xx))
)
返回错误:变量 XX 未绑定。我还会收到有关 while 和消息的样式警告。有人可以为我指出这段代码的问题所在吗?
【问题讨论】:
-
普通 Lisp。 XX 未定义。你还没有定义它。您可能想要定义它。虽然不存在。请参见循环。 MESSAGE 也不存在。看起来不像 Common Lisp。也许您应该先检查语言参考。它们也是 APROPOS 和 DOCUMENTATION 等内置工具,应该会有所帮助。
-
“我一直在使用教程来帮助我学习这门语言,但出于某种原因,这段代码”您能否提供该教程的链接? while 不是 Common Lisp 中的循环宏(尽管您可以轻松定义一个),所以要么本教程不是一个很棒的教程,要么不是一个普通的 lisp 教程,要么在尚未完全复制的上下文。
-
我会推荐this而不是任何网络教程。
-
设置未定义的变量会产生未定义的后果。尝试将其放入文件并编译该文件。您会看到 CLISP 编译器会抱怨未绑定/未声明的变量。
-
@DanielJour:但是
setq指的是“命名变量的符号”:如果符号未绑定,则不会命名变量。
标签: lisp common-lisp sbcl