将'cond'改为特殊形式而不是语法糖会有什么样的优势?
答案 0 :(得分:5)
在一篇有关Scheme(Lambda the Ultimate Declarative,§1.2)的具有里程碑意义的论文中,斯蒂尔写道:
然而,无可否认 IF-THEN-ELSE似乎是最简单的 条件控制算子很容易 能够表达所有其他人。
然后他写了§4.1:
虽然我建议只建造 下层部分 编译器,加上必要的宏 提供标准的LISP功能,如 COND和PROG,很容易 想象一下构建一个ALGOL 例如,通过提供一个 解析器加上必要的宏作为 前端。
Steele试图在这篇论文和其他论文中提出的观点,包括他在Rabbit编译器上的MS thesis,if
比cond
更简单,并且通常它会更多有意义地将库语法宏扩展为cond
和case
为更简单的基本语法,如if
。这样您就可以保持编译器需要理解的输入语言简单,这样做的优点是更容易推理,实现和优化。这一切都符合我想象的极简主义设计。
从表面上看,人们可能会想到cond
可以更优化地编译(想想switch表)。正如所有关于“优化”的问题没有实际数据或证据一样,这可能会成为一个不成熟的结论,事实上我不会打赌我的钱是真的。
因此,为了回答您的问题,我发现在cond
基本语法而不是在Scheme中使用宏时没有真正或持久的优势。或者,如果有优势,至少会有一些缺点,比如更复杂的评估者。
答案 1 :(得分:0)
cond 是一种特殊形式,因为必须先评估参数。
很重要。如果我没弄错的话,Scheme最初没有 if 形式
实际上 if 形式可能是使用宏的语法糖。