例如,模式匹配是一种编程语言功能,可以通过宏添加到clojure语言中:http://www.brool.com/index.php/pattern-matching-in-clojure
该语言还可以添加哪些其他语言功能?
答案 0 :(得分:2)
在我的帽子上,我有两个例子,但我相信还有更多。
答案 1 :(得分:0)
我认为这是一个愚蠢的问题,询问可以添加什么,你应该问的是你不能添加的内容。宏允许您挂钩编译器,这意味着您几乎可以做任何事情。
目前你无法在语言中添加自己的语法。 Clojure没有用户extensble阅读器,这意味着你没有任何阅读器宏(http://dorophone.blogspot.com/2008/03/common-lisp-reader-macros-simple.html)。这不是因为技术问题,而是Rich Hickey(Clojure创作者)的更多决定。
您不能做的是实现需要虚拟机支持的功能,如添加尾调用语义或goto
。
如果你想看到已经完成的一些事情:Are there any Clojure DSLs?
请注意,此列表并非100%最新。
编辑:
因为你似乎把模式匹配作为一个例子(它是宏的力量的一个非常好的例子),你应该真正看看match
库。它可以说是Clojure中最快的模式匹配库。 http://vimeo.com/27860102
答案 2 :(得分:0)
您可以有效地添加自己喜欢的任何语言功能。
这是因为宏能够在编译时构造任意代码:只要您能够确定为了实现语言功能需要生成哪些代码,就可以用宏来实现。
我见过的一些例子:
有几点需要注意: