我能';t在sbcl[LISP]中使用setq

我能';t在sbcl[LISP]中使用setq,lisp,common-lisp,sbcl,Lisp,Common Lisp,Sbcl,我试着浏览相关的问题,但对于如何在CommonLisp中定义变量,我找不到一个简单的答案。我使用sbcl实现,并一直使用教程帮助我学习该语言,但出于某种原因,以下代码: ;;print a line many times (setq xx 1) (while (< xx 20) (message "yay") (setq xx (1+ xx)) ) ;;打印一行多次 (setq xx 1) (而(如果标题标题和/或未绑定的编译器抱怨是/为什么你在这里结束,很可能你感兴趣的答案

我试着浏览相关的问题,但对于如何在CommonLisp中定义变量,我找不到一个简单的答案。我使用sbcl实现,并一直使用教程帮助我学习该语言,但出于某种原因,以下代码:

;;print a line many times
(setq xx 1)
(while (< xx 20)
  (message "yay")
  (setq xx (1+ xx))
  )
;;打印一行多次
(setq xx 1)
(而(

返回错误:变量XX未绑定。我还收到了while和message的样式警告。有人能给我指出这段代码的问题所在吗?

本教程似乎不是常见的lisp,它似乎更像emacs lisp,要执行此函数,请使用emacs和ielm命令

*** Welcome to IELM ***  Type (describe-mode) for help.
ELISP> ;print a line many times
(setq xx 1)
(while (< xx 20)
  (message "yay")
  (setq xx (1+ xx))
  )
*** IELM error ***  More than one sexp in input
ELISP> (setq xx 1)
1 (#o1, #x1, ?\C-a)
ELISP> (while (< xx 20)
     (message "yay")
     (setq xx (1+ xx)))
nil
ELISP> (message "yay")
"yay"
ELISP> (while (> xx 20)
     (message "yay")
     (setq xx (1+ xx)))
nil
ELISP> xx
20 (#o24, #x14, ?\C-t)
ELISP> 

你需要学习如何定义变量,setq vs defparameter,特殊变量。。。循环,很多事情我开始学习LISP几年前,我认为这是一个惊人的旅行

< P>如果标题标题和/或未绑定的编译器抱怨是/为什么你在这里结束,很可能你感兴趣的答案被埋藏在安奎吉的答案的底部附近:考虑(初学者)使用
defvar
defparameter
let
。前两个通常用作顶级表单。相反,
let
用于在有限范围内建立“临时”命名变量

 ;; define *xx* so that it can be "seen" globally
 (defparameter *xx* 23)
 ;; establish a variable which is only "seen" locally
 (let ((xx 0))
   (format t "xx: ~S~%" xx)
   (incf xx)
   (format t "xx: ~S~%" xx))

您也可能会发现有帮助。

Common Lisp。XX未定义。你还没有定义它。您可能需要定义它。虽然不存在。参见循环。消息也不存在。看起来不像普通的Lisp。也许你应该先查一下语言参考资料。它们也是内置的工具,如APROPOS和文档,应该会有所帮助。“我一直在使用教程来帮助我学习语言,但出于某种原因,这段代码”你能提供到该教程的链接吗?虽然在Common Lisp中不是循环宏(尽管您可以轻松定义一个),但本教程不是很好,也不是Common Lisp,或者在未完全复制的上下文中提供了此代码。我建议不要使用任何web教程。设置未定义的变量会产生未定义的后果。试着把它放进一个文件并编译那个文件。您将看到CLISP编译器会抱怨未绑定/未声明的变量。@DanielJour:但是
setq
指的是“符号命名变量”:如果符号未绑定,它不会命名变量。
 ;; define *xx* so that it can be "seen" globally
 (defparameter *xx* 23)
 ;; establish a variable which is only "seen" locally
 (let ((xx 0))
   (format t "xx: ~S~%" xx)
   (incf xx)
   (format t "xx: ~S~%" xx))