-3

在 Scheme 中,原始过程是否被视为特殊形式?

另外,有点太笼统了,但定义与其他特殊形式有何不同?

谢谢

4

2 回答 2

4

原始与特殊形式无关。特殊形式和过程之间的主要区别在于,过程在应用之前会评估其所有参数。这与用户定义的特殊表单和用户定义的过程之间的区别相同。

在 Scheme 报告中,原语是您需要在底层系统中实现的语法和过程。例如。如果你用 Java 制作 Scheme,你需要用 Java 制作原始语法和过程。其余的可以根据 Scheme 本身的原语来定义。例如if是原始语法,而cond称为库语法。cond您只需为和瞧瞧制定语法规则;它使用if原语。原始程序是相同的。即它们是您定义方案报告的其余部分所需的程序。什么是原语什么不是Scheme中的编程不是必需的,只有那些想要使用报告来实现Scheme的人需要这些提示。

define是一种非常特殊的原始语法。它确实是顶级绑定的原语,因为它是定义新的顶级绑定的唯一方法,但是当您在过程定义中看到它时,它实际上并不是一个原语。它可以写成letrec*可以用匿名过程调用和set!. 我想为特殊形式使用相同的名称来进行全局和本地绑定是很好的,所以这是一个实际的原因,但如果 Scheme 更改为具有不同的名称,那么只有添加全局绑定的名称才是原语。

于 2014-03-22T23:39:09.273 回答
2

原始程序是否被视为特殊形式?

不,原始过程没有什么特别之处——它们的行为与用户定义的过程完全一样。有关详细信息,请参阅R5RS - 标准程序

定义与其他特殊形式有何不同?

好吧,我想到的一件事是,大多数特殊形式 ( if, let) 返回正常的方案值并且可以出现在任何地方,而define块返回值没有由标准定义,只能在顶层或正文中执行另一种特殊形式。请参阅R5Rs - 定义

于 2014-03-22T21:58:20.620 回答