相关疑难解决方法(0)

Lisp中的setq和defvar

我看到实用的Common Lisp使用(defvar *db* nil)设立一个全局变量.是否可以setq用于同一目的?

使用defvarvs. 的优点/缺点是setq什么?

lisp variables common-lisp variable-declaration assign

47
推荐指数
4
解决办法
2万
查看次数

defvar,defparameter,setf和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)

我发现的完全一样.

我无法弄清楚它们有什么不同?

lisp clisp common-lisp

41
推荐指数
2
解决办法
2万
查看次数

使用setf,defvar,let和scope分配变量

所以,我
在lisp中读过setq和defvar,
http://www.cs.ucf.edu/courses/cop4020/spr2006/plsetup.html,
在In Lisp中,如何解决"警告:假设特殊?"
关于setf和defvar之间差异的其他地方.所以我决定尝试一下这个想法:

CL-USER> (defun foo ()
       (setf x 10)
       (print x))

; in: DEFUN FOO
;     (SETF X 10)
; ==>
;   (SETQ X 10)
; 
; caught WARNING:
;   undefined variable: X
; 
; compilation unit finished
;   Undefined variable:
;     X
;   caught 1 WARNING condition
FOO
CL-USER> x
; Evaluation aborted on #<UNBOUND-VARIABLE X {10040F1543}>.
CL-USER> (foo)

10 
10
CL-USER> x
10
Run Code Online (Sandbox Code Playgroud)

好吧,我知道setf应该用来改变现有变量的值,但是未定义的变量警告似乎在SBCL中得到了很好的处理(尽管我已经读过不同的CL实现可能会以不同方式处理它,因此它不是最好的事情).

输入第二个测试:

CL-USER> (defun bar ()
       (defvar …
Run Code Online (Sandbox Code Playgroud)

variables scope common-lisp

4
推荐指数
1
解决办法
3084
查看次数

在Lisp中,如何修复"警告:假设特殊?"

在这个文件中,我得到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)

lisp warnings function common-lisp

3
推荐指数
2
解决办法
2774
查看次数