関数の本体にマクロが含まれている関数を定義しましょう。マクロは不特定の時点で展開され、*test*
このプロセス中に のグローバルな動的値を使用します。
> (defvar *test* nil)
> (defmacro body ()
`(print ,*test*))
> (defun test ()
(body))
> (test)
NIL
しかし、関数の定義中にバインド*test*
したい場合はどうすればよいでしょうか。1
test
1
NIL
ラップするだけdefun
でlet
は機能しません:
> (let ((*test* 1))
(defun test ()
(body)))
> (test)
NIL
おそらく、Hyperspec の次の行に関連しています。
コンパイル時の副作用を実行するためにdefunは必要ありません
しかし、それを行う他の方法はありますか?