我经常阅读关于为什么hygenic宏更好并且clojure的宏系统基于Common Lisp并且不是hygenic的辩论。
我的问题是:可以在clojure中实现方案样式宏系统,以及在其他lisps中植入的方案样式宏的一些示例。
答案 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方式的宏不包括在内。