ラベル名のリストを使用して、これらの関数で開始されるスレッドの順序/量を定義したいと思います。しかし、SBCLが文句を言うので、それは機能しません:
DO-STUFFは束縛されていません。
例えば:
(labels ((do-stuff (argI argII) (values argI argII))
(do-stuff-II (argI argII) (values argII argI)))
(mapcar #'(lambda(name)
(sb-thread:make-thread name :arguments '(1 2)))
'(do-stuff do-stuff-II do-stuff)))
リストを次のように展開するマクロの使用:
(labels ((do-stuff (argI argII) (values argI argII))
(do-stuff-II (argI argII) (values argII argI)))
(let ((threads nil))
(push (sb-thread:make-thread #'do-stuff :arguments '(1 2)) threads)
(push (sb-thread:make-thread #'do-stuff-II :arguments '(1 2)) threads)
(push (sb-thread:make-thread #'do-stuff :arguments '(1 2)) threads)
threads))
動作しますが、不要なlet and pushを使用しているため、これはエレガントではありません。
最初のアプローチを修正するにはどうすればよいですか?マクロを作成する必要がありますか?