我是新來的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