* (defvar *big* 100) *BIG* * (defvar *small* 1) *SMALL* 50 0] (defun smaller() (setf *big* (1- (guess-number)))(guess-number)) SMALLER 0] (defun bigger() (setf *small* (1+ (guess-number)))(guess-number)) * (defun guess-number() (ash (+ *small* *big*) -1)) STYLE-WARNING: redefining COMMON-LISP-USER::GUESS-NUMBER in DEFUN GUESS-NUMBER * guess-number 0[2] (smaller) ; No debug variables for current frame: using EVAL instead of EVAL-IN-FRAME. 25 0[2] (bigger) ; No debug variables for current frame: using EVAL instead of EVAL-IN-FRAME. 37 0[2] (bigger) ; No debug variables for current frame: using EVAL instead of EVAL-IN-FRAME. 43 0[2] (smaller) ; No debug variables for current frame: using EVAL instead of EVAL-IN-FRAME. 40 0[2] (smaller) ; No debug variables for current frame: using EVAL instead of EVAL-IN-FRAME. 38
我们设定数字是38
defvar定义全局变量,defparameter也是,但是defparameter语句可以反复使用,多次定义一个变量或改变量的值
比如
(defparameter *xx* 100)
然后再执行一次
(defparameter *xx* 101)
那么此时
*xx*是101
而
defvar则不同
(defvar *xx* 100)
然后再执行一次
(defvar *xx* 101)
那么此时
*xx*是100

本文解析了一个基于Lisp语言的猜数字游戏实现过程。通过定义全局变量和函数,逐步缩小猜测范围,最终准确猜中指定数字。文章对比了defvar与defparameter的区别,并详细解释了相关函数的工作原理。
775

被折叠的 条评论
为什么被折叠?



