我看到实用的Common Lisp使用(defvar *db* nil)设立一个全局变量.是否可以setq用于同一目的?
使用defvarvs. 的优点/缺点是setq什么?
我发现了一个类似的问题.
但我不太明白这个解释.
所以我试图使用以下示例运行clisp:
[1]> (defvar a 5)
A
[2]> (+ a 1)
6
[3]> (defparameter b 5)
B
[4]> (+ b 1)
6
[5]> (setf c 5)
5
[6]> (+ c 1)
6
[7]> (setq d 5)
5
[8]> (+ d 1)
6
[9]> (let ((a 500)) (+ a 1))
501
[10]> (let ((b 500)) (+ b 1))
501
[11]> (let ((c 500)) (+ c 1))
501
[12]> (let ((d 500)) (+ d 1))
501
[13]>
Run Code Online (Sandbox Code Playgroud)
我发现的完全一样.
我无法弄清楚它们有什么不同?
我正在使用GCL在Ubuntu上编程.从各种来源的Common Lisp文档中,我了解到let创建局部变量,并setq设置现有变量的值.在下面的例子中,我需要创建两个变量并对它们的值求和.
setq(defun add_using_setq ()
(setq a 3) ; a never existed before , but still I'm able to assign value, what is its scope?
(setq b 4) ; b never existed before, but still I'm able to assign value, what is its scope?
(+ a b))
Run Code Online (Sandbox Code Playgroud)
let(defun add_using_let ( )
(let ((x 3) (y 4)) ; creating variables x and y
(+ x y)))
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我似乎都取得了相同的结果; 使用setq …
在这个文件中,我得到9个"假定特殊"的警告.他们是
;;;*** Warning in CHECK-ROW: CHECKARRAY assumed special in SETQ
;;;*** Warning in CHECK-ROW: RESULT assumed special in SETQ
;;;*** Warning in CHECK-ROW: CHECKARRAY assumed special
;;;*** Warning in CHECK-ROW: CHECKARRAY assumed special
;;;*** Warning in CHECK-ROW: CHECKARRAY assumed special
;;;*** Warning in CHECK-ROW: CHECKARRAY assumed special
;;;*** Warning in CHECK-ROW: CHECKARRAY assumed special
;;;*** Warning in CHECK-ROW: RESULT assumed special in SETQ
;;;*** Warning in CHECK-ROW: RESULT assumed special
Run Code Online (Sandbox Code Playgroud)
整个文件只有两个功能 -
(defun get-element (x y board)
(nth y (nth …Run Code Online (Sandbox Code Playgroud)