我是 lisp 的新手,正在阅读Paul Graham的ANSI Common Lisp,其中一个练习是定义一个类似 apply 的函数,其中在返回之前打印出的任何数字默认以八进制打印。
我尝试了以下方法:
(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*
变量。