【发布时间】:2023-04-11 09:08:01
【问题描述】:
在 sbcl repl 中执行以下代码时,我收到变量测试用例 n 的“未定义变量”警告。我已经在论坛上解决了类似的问题,如果变量在没有先定义的情况下被 setf/setq'ed ,就会出现警告。但是我已经使用 defparameter 定义了这些变量,但仍然收到警告。
我注意到的一件事是,如果我不引用格式语句中的变量,则不会出现警告。 我也尝试过使用 defvar 。但它仍在发出警告。 有人可以帮我理解为什么即使定义了变量,在语句中使用时也会引发警告?
(defun main ()
(defvar test-cases 10)
(defvar l 12)
(defvar n 13)
(format t "~a ~a ~a" test-cases l n))
; in: DEFUN MAIN
; (FORMAT T "~a ~a ~a" TEST-CASES L N)
;
; caught WARNING:
; undefined variable: N
;
; caught WARNING:
; undefined variable: TEST-CASES
;
; compilation unit finished
; Undefined variables:
; N TEST-CASES
; caught 2 WARNING conditions
WARNING: redefining COMMON-LISP-USER::MAIN in DEFUN
【问题讨论】:
-
DEFVAR用于定义在顶层的全局变量。使用LET定义局部变量。见Practical Common Lisp chapter 6. Variables
标签: common-lisp sbcl