一个特定的宏在其主体中运行每个表达式,在每个表达式之间交错原子,并收集结果.
这适用于硬编码表达式,但是如果我想动态生成一系列表达式插入到宏调用的主体中,那么显然不会起作用,因为这将在宏完成之后进行评估工作.
我想解决方案是编写我自己的宏来生成我需要的表达式,但我不确定是否会在外部宏之前进行评估.
我尝试过类似的东西,但它不起作用:
(mac genexpr (list)
(map (fn (e) `(something ,e)) list))
Run Code Online (Sandbox Code Playgroud)
尝试使用begin(方案)或progn(常见的lisp)表单.看起来你正在使用arc,它似乎命名这个结构do.
(mac genexpr (list)
`(do ,@(map (fn (c) `(something ,e)) list)))
Run Code Online (Sandbox Code Playgroud)