0

将'cond'改为一种特殊形式而不是语法糖有什么好处?有什么样的优势可以改变'cond'是一种特殊形式

+0

特殊形式和语法糖有什么区别?我不明白这个问题。 – grettke 2010-02-19 19:50:25

+0

像'(如果c e a)'这样的特殊形式不符合首先评估操作符和操作数的正常评估规则,然后应用评估操作符来评估操作数。语法糖在解析阶段被转化为等价但更基本的基本语法。 – eljenso 2010-02-19 20:01:02

回答

0

cond是一种特殊的形式,因为参数必须在必须进行评估之前进行评估。
非常重要。如果我没有弄错,如果最初形式没有
其实如果形式可以是使用宏的语法糖。

5

在方案上具有里程碑意义的论文之一(Lambda the Ultimate Declarative,§1.2),斯蒂尔写道:

但是,无可否认, IF-THEN-ELSE似乎是最简单的 条件控制操作很容易 能够表达所有其他人。

然后,他在§4.1写道:

虽然我提出构建只 的 编译器的下级部分,再加上必要的宏 提供标准LISP等功能 COND和PROG,人们可以很容易想象构建ALGOL 编译器,例如,通过提供 解析器和必要的宏作为 前端。

是斯蒂尔试图在这方面和其他文件进行,包括对兔编译他MS thesis,是ifcond简单,一般它更有意义的一点宏观扩展库语法condcase转化为更简单的基本语法,如if。通过这种方式,您可以保持编译器需要了解的输入语言简单,其优点是易于推理,实施和优化。这一切都符合Scheme I猜想的简约设计。从表面上看,人们可能会想,cond可以更好地编译(想想switch表)。与所有关于“优化”的问题没有实际的数据或证据一样,这可能是一个过早的结论,实际上我不会赌我的钱是真的。

因此,要回答您的问题,我认为在Scheme中使用cond而不是宏中的宏必须有真正的或持久的优势。或者,如果有优势,至少会有一些劣势,比如更复杂的评估人员。