1

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

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

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

我尝试了这样的事情,但没有奏效:

(mac genexpr (list)
  (map (fn (e) `(something ,e)) list))
4

1 回答 1

6

尝试使用begin(scheme) 或progn(common lisp) 形式。看起来您正在使用 arc,它似乎将这个结构命名为do

(mac genexpr (list)
  `(do ,@(map (fn (c) `(something ,e)) list)))
于 2011-08-19T06:58:46.500 回答