関数を生成するマクロ・その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 のパッケージで定義された独自の関数とかでも別パッケージに移動すると使えないことがある。オリジナルの関数は使えるのに・・・ちょっとここをクリアにしたい。