私はLisp が初めてで、 Paul GrahamによるANSI Common Lispを調べています。演習の 1 つは、apply のような関数を定義して、返される前に出力された数値がデフォルトで 8 進数で出力されるようにすることです。
私は次のことを試しました:
(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)
私の質問は、なぜ 2 番目の例が機能するのに、最初の例が機能しないのですか? どちらも*print-base*
変数を操作しているようです。