一个特定的宏在其主体中运行每个表达式,在每个表达式之间交错一个原子,并收集结果。
这适用于硬编码的表达式,但如果我想动态生成一系列表达式以插入宏调用的主体,那显然是行不通的,因为这将在宏完成后评估工作。
我想解决方案是编写我自己的宏来生成我需要的表达式,但我不确定它会在外部宏之前被评估。
我尝试了这样的事情,但没有奏效:
(mac genexpr (list)
(map (fn (e) `(something ,e)) list))
尝试使用begin
(scheme) 或progn
(common lisp) 形式。看起来您正在使用 arc,它似乎将这个结构命名为do
。
(mac genexpr (list)
`(do ,@(map (fn (c) `(something ,e)) list)))