【发布时间】:2014-08-08 13:09:48
【问题描述】:
每个 Common Lisp 程序员都知道宏是一个强大的工具。通用 Lisp 宏已被用于在 Lisp 之上添加面向对象而不更改语言规范;读取宏是另一种具有思维弯曲功能的构造。
另一个允许元编程的程序是 Forth。 Forth 使用“单词”和“生成单词”的方式略有不同。
我想从涉足这两种语言的人那里知道,常见的 lisp 宏和 forward 构造是否在广度/功能上具有可比性:是否有一些你可以用前者做而你不能用后者做的事情?反之亦然?
当然,我不是在谈论两种语言的图灵完备性:我在谈论metaprogramming 能力。 C 是图灵完备的,但只有傻瓜才会说 C 宏在功能上与 Common Lisp 相当。
【问题讨论】:
-
这比之前的版本Lisp and Forth macros [on hold]具体多了,很好。当然,现在 那个 问题已经重新开始投票,而这个问题已经接近投票,所以对于哪些应该真正保持开放存在一些混淆。在这个问题中您要寻找的内容要清楚得多,但它仍然可能是题外话,因为"comparison question are a poor fit for [Stack Overflow], because there are no bounds to the answers which can be posted to them."。
-
太宽泛的密切原因在这里适用:“要么可能的答案太多,要么对于这种格式来说,好的答案太长了。 "这根本不是一个坏的问题。它不是特别适合 Stack Overflow。例如,这个问题在 comp.lang.lisp 中可能很棒。
-
特定的子问题,“有没有你可以用前者做而你不能用后者做的事情?反之亦然?”可能是这里最具体的。它仍然可能承认太多的答案,但如果有一些事情可以做而另一个不能,那么可能会给出一个相对规范的答案。
-
反对因过于宽泛而关闭。示例答案:“在
LANG1中,您无法实现foo,它已在LANG2中实现,因为您缺少bar,LANG1有而LANG2没有。”在Why are some questions marked "on hold"? 中没有提及“太多答案” 作为应该关闭问题的原因。 -
实际上,它就在您链接到的页面中:“太宽泛 - 如果您的问题可以用整本书来回答,或者有很多有效的答案,那就是对于我们的格式可能过于宽泛."
标签: lisp common-lisp metaprogramming forth gforth