在clojure中实现方案样式宏

时间:2014-07-09 22:48:43

标签: clojure scheme

我经常阅读关于为什么hygenic宏更好并且clojure的宏系统基于Common Lisp并且不是hygenic的辩论。

我的问题是:可以在clojure中实现方案样式宏系统,以及在其他lisps中植入的方案样式宏的一些示例。

2 个答案:

答案 0 :(得分:5)

通过"方案式宏系统",我不确定你的意思是syntax-rules(简单的模式样式系统)还是syntax-case(更灵活的系统)与datum->syntax一起,实际上确实可以让你弯腰或平整休息卫生。)

此外,Racket有syntax-parse,它比syntax-case更简单易用,并且(除其他外)使得编写可以提供可理解错误消息的宏感到愉快。

无论您的意思是什么,都有一个Clojure project that purports to implement aspects of all three。但是我没有尝试过,而且我无法保证它是如何成功的。

答案 1 :(得分:2)

我不确定Clojure的宏观系统不卫生是否准确。我所看到的一个类似的讨论是指读者宏(Clojure没有)的常见lisp系统不卫生,因为它们缺乏一种机制来保持不同模块中的读取器宏不相互替换。这是一个明确而有意的设计决策,用于构建语言,使Scheme方式的宏不包括在内。