Scheme语言的干净宏怎么实现

在lisp中,宏的实现有一个小问题,就是宏展开后的结果如果使用了一些符号,这些符号如果与程序上下文中已有的符号重复会产生冲突,因此自然需要避免这个问题了。

如果是Lisp实现本身可以避免这个问题,就称作干净宏,否则就是不干净的宏。

common lisp的宏是不干净的,而scheme标准中宏是干净的。

先不管common lisp,本文只说怎么使得在实现scheme的宏的过程中,实现一个干净的宏系统。

简单的实现方式就是在展开宏的过程中,执行宏的展开逻辑的代码时,里面的临时symbol都自动替换成一个从来没有使用过的符号。如此一来,自然避免了符号冲突。