Lisp宏和scala宏之间有什么根本区别吗?
据我所知,宏是编程程序的手段。他们扩展了语言。但它们同样强大吗?与Lisp宏相比,scala宏有一些限制吗?说lisp宏更强大是否恰当?与Lisp宏相比,scala宏有一些适用性限制吗?
如果Lisp和scala宏之间没有概念上的区别,那么可以只研究Lisp宏的机制,然后只应用于scala。但是如果scala宏没有Lisp宏那么强大,那么这是不可能的。有很多关于Lisp的好文献,但关于scala的文献却不多。
Lisp是动态类型语言。 Scala是静态类型语言,其类型系统非常强大。
Scala中的宏可以根据其类型(或其子树的类型)转换AST,甚至可以更改其类型。所以Scala中的宏不仅是语法而且是语义。
另请参阅论文https://infoscience.epfl.ch/record/226166/files/EPFL_TH7159.pdf#chapter.10,p中有关Scala中的宏与Lisp中的宏的注释。 206。