Lisp宏和scala宏之间有根本区别吗?
可以这么说,我知道宏是对程序进行编程的手段。它们扩展了语言。但是它们同样强大吗?与Lisp宏相比,scala宏有一些限制吗?可以说lisp宏更强大吗?与Lisp宏相比,scala宏是否有某些适用性限制?
如果Lisp和scala宏之间没有概念上的区别,则可以只研究Lisp宏的机制,然后将其应用于scala。但是,如果Scala宏不像Lisp宏那么强大,那是不可能的。关于Lisp的文献很多,但是关于scala的文献很少。
答案 0 :(得分:2)
Lisp是动态类型的语言。 Scala是静态类型的语言,其类型系统非常强大。
Scala中的宏可以根据AST的类型(或子树的类型)来转换AST,甚至可以更改其类型。因此,Scala中的宏不仅是语法上的,而且还是语义上的。
另请参见论文https://infoscience.epfl.ch/record/226166/files/EPFL_TH7159.pdf#chapter.10中关于Scala中的宏与Lisp中的宏的论述。 206。