如何在宏调用中的编译时生成多个表达式?

Ped*_*lva 1 macros arc-lisp

一个特定的宏在其主体中运行每个表达式,在每个表达式之间交错原子,并收集结果.

这适用于硬编码表达式,但是如果我想动态生成一系列表达式插入到宏调用的主体中,那么显然不会起作用,因为这将在宏完成之后进行评估工作.

我想解决方案是编写我自己的宏来生成我需要的表达式,但我不确定是否会在外部宏之前进行评估.

我尝试过类似的东西,但它不起作用:

(mac genexpr (list)
  (map (fn (e) `(something ,e)) list))
Run Code Online (Sandbox Code Playgroud)

Aar*_*ron 5

尝试使用begin(方案)或progn(常见的lisp)表单.看起来你正在使用arc,它似乎命名这个结构do.

(mac genexpr (list)
  `(do ,@(map (fn (c) `(something ,e)) list)))
Run Code Online (Sandbox Code Playgroud)