我想使用标签名称列表来定义以这些函数启动的线程的顺序/数量。但它不起作用,因为 SBCL 抱怨:
DO-STUFF 不是 fbound。
例如:
(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 和 push,这让我觉得不那么优雅。
我该如何解决我的第一种方法?我必须写一个宏吗?