Shammer's Philosophy

My private adversaria

関数を生成するマクロ・その3

関数を生成するマクロ・その2 - Shammerism関数とマクロでのクォートの扱いの違い - Shammerismの結果を併せて、以下のようなマクロを定義。

? (defmacro public-symbol (s)
`(export ',s))
PUBLIC-SYMBOL
? (defmacro generate-semaphore-accessor (name)
  `(let ((semaphore (make-semaphore)))
     (defun ,name ()
       semaphore)
     (public-symbol ,name)))
GENERATE-SEMAPHORE-ACCESSOR
? (generate-semaphore-accessor get-my-semaphore)
T
?

なんか動作したっぽいぞ。。。確認するには・・・別のパッケージでこのマクロの定義と実行をやって、さらに別のパッケージからそれを::を使用せずにアクセスできるか、というのをやらないといけない。パッケージといえば defpackage だが。

http://clhs.lisp.se/Body/m_defpkg.htm

これまでの疑問で、default のパッケージで定義された独自の関数とかでも別パッケージに移動すると使えないことがある。オリジナルの関数は使えるのに・・・ちょっとここをクリアにしたい。