use*_*103 13 lisp metaprogramming common-lisp forth gforth
每个Common Lisp程序员都知道宏是一个强大的工具.除了其他方面,已经使用Common Lisp宏在Lisp之上添加面向对象而不改变语言规范; read-macros是另一种具有思维弯曲功能的构造.
另一个允许元编程的程序是Forth.Forth采用"单词"和"生成单词"的方式略有不同.
我想知道,从涉及两种语言的人那里,如果普通的lisp宏和前面的结构在广度/功率方面具有可比性:你可以用前者做一些你不能用后者做的事吗?或相反亦然?
当然,我不是在谈论两种语言的图灵完整性:我在谈论元编程能力.C是Turing-complete,但只有傻瓜会说C宏与Common Lisp的功能相当.
在我看来,Common Lisp宏类似于Forth 立即词.(实际上,它们与Lisp读取器宏最相似.)
它们都是程序宏,即可以使用该语言的全部功能.
他们都可以访问源代码输入.
他们都可以输出语言中可以表达的任何东西.(例如,Lisp中的面向对象扩展,或Forth中的基本控制流构造.)
或许,主要区别在于Forth"宏"输入是字符串,而Lisp宏在解析树上操作.
我是Forth的实施者,在Forth,六个实现,几百个项目问题方面拥有丰富的经验.我还做了一个小的面向对象的扩展(小的,即十几行左右).我在LISP方面的经验更多的是在课程层面,但我认为可以公平地说LISP的元编程设施更加系统化,实际上更强大.
在LISP中基于抽象构建抽象相对容易.在Forth,如果我想在由具有非平凡定义的对象定义的线性空间上定义矩阵.我切换到Python.
原因很明显,至少对我而言.LISP的创造者,数学家,而查克摩尔是实际程序员的最终范例,从不在理论问题上浪费时间.
这通过以下方式扩展到这个问题.lisp宏在Lisp的上下文中具有结构,并且至少表明符合一般lisp原则的含义.一个直接的词是另一个程序,可以意味着做任何事情,包括让狗吃晚餐.
| 归档时间: |
|
| 查看次数: |
2028 次 |
| 最近记录: |