データ登録の平行度合いを上げるためにスレッドマネージャを作ることにしたんじゃけど、最近は SBCL(Linux) と Clozure CL(Windows) の両方を使う事が多いけぇ どちらでも動くようにしょうと思ったんよ。
とりあえずスレッドを投入する可搬オペレータを下のように書いたんじゃけどダメじゃったみたい。
存在せんパッケージを指定しとると defmacro の時にエラーになるんよ。
マクロじゃったら実行するまで評価されんのかと思うたんじゃが莫迦な勘違いじゃったみたい。
(defmacro enter-thread (&key name process) `(cond ((string= (lisp-implementation-type) "Clozure Common Lisp") (ccl:process-run-function ,name ,process)) ((string= (lisp-implementation-type) "SBCL") (sb-thread:make-thread ,process :name ,name))))
で「実践Common Lisp」の "パスネーム可搬ライブラリ" を見たら #+ を使えばエエということがわかったんで無事解決したんよ。
(defun enter-thread (&key name process) #+sbcl (sb-thread:make-thread process :name name) #+ccl (ccl:process-run-function name process))
いやぁ、ホンマよかったけぇ。