我经常阅读有关为什么hygenic宏更好,clojure的宏系统是基于Common Lisp并且不卫生的辩论。在clojure中实现方案样式的宏
我的问题是:可以在clojure中实现一个scheme风格的宏系统,以及在其他lisps中植入的scheme风格的宏的一些例子。
我经常阅读有关为什么hygenic宏更好,clojure的宏系统是基于Common Lisp并且不卫生的辩论。在clojure中实现方案样式的宏
我的问题是:可以在clojure中实现一个scheme风格的宏系统,以及在其他lisps中植入的scheme风格的宏的一些例子。
通过“计划式的宏系统”,我不知道你的意思syntax-rules
(简单的图案样式系统)或syntax-case
(更灵活的系统,与datum->syntax
以来,实际上并让你弯腰或flat-突破卫生)。
另外,Racket有syntax-parse
,它比syntax-case
稍微简单一些,并且(除其他外)使编写可以理解错误消息的宏变得愉快。
无论你的意思是什么,都有Clojure project that purports to implement aspects of all three。不过,我还没有尝试过,我不能保证它如此成功。
我不确定说Clojure的宏观系统不卫生是正确的。我见过的一个类似的讨论,指的是Common Lisp的阅读器宏系统(Clojure没有这样做),因为它们不卫生,因为它们缺乏一种机制来保持不同模块中的阅读器宏不会互相替换。这是一个明确而有意的设计决策,用于构建语言,使得不包含Scheme的宏。
对于投票结束这个“太宽泛”的人,我不同意。它不仅要求是否有可能,而且要求正在实施的事例。这是一个具体的问题,可以具体回答(正如我试图做的那样)。 –