我是新来的Lisp和由保罗·格雷厄姆和一个演习通过ANSI Common Lisp的会是这样定义适用,如果任何号码打印出来它会返回默认情况下,八进制打印之前的功能。为什么ANSI Common Lisp的范围示例不能按预期工作?
我试过如下:
(let ((*print-base* 8))
(defun like-apply (&rest args)
(apply #'apply args)))
但预期它没有工作:
(like-apply #'princ '(8)); returns 8 8 (expecting 10 8)
以下工作不过:
(defun apply8 (&rest args)
(let ((*print-base* 8))
(apply #'apply args)))
返回正确:
(apply8 #'princ '(8)); returns 10 8 (as expected)
所以我的问题是为什么第二个例子工作,但不是第一个?这两个似乎操纵*print-base*
变量。
感谢您解释如此清楚,以及关于defparameter和defvar创建特殊变量的附加提示。当他们现在特殊时,它意味着什么是完全有意义的。 – ajivani