在 Scheme 中,原始过程是否被视为特殊形式?
另外,有点太笼统了,但定义与其他特殊形式有何不同?
谢谢
原始与特殊形式无关。特殊形式和过程之间的主要区别在于,过程在应用之前会评估其所有参数。这与用户定义的特殊表单和用户定义的过程之间的区别相同。
在 Scheme 报告中,原语是您需要在底层系统中实现的语法和过程。例如。如果你用 Java 制作 Scheme,你需要用 Java 制作原始语法和过程。其余的可以根据 Scheme 本身的原语来定义。例如if
是原始语法,而cond
称为库语法。cond
您只需为和瞧瞧制定语法规则;它使用if
原语。原始程序是相同的。即它们是您定义方案报告的其余部分所需的程序。什么是原语什么不是Scheme中的编程不是必需的,只有那些想要使用报告来实现Scheme的人需要这些提示。
define
是一种非常特殊的原始语法。它确实是顶级绑定的原语,因为它是定义新的顶级绑定的唯一方法,但是当您在过程定义中看到它时,它实际上并不是一个原语。它可以写成letrec*
可以用匿名过程调用和set!
. 我想为特殊形式使用相同的名称来进行全局和本地绑定是很好的,所以这是一个实际的原因,但如果 Scheme 更改为具有不同的名称,那么只有添加全局绑定的名称才是原语。
原始程序是否被视为特殊形式?
不,原始过程没有什么特别之处——它们的行为与用户定义的过程完全一样。有关详细信息,请参阅R5RS - 标准程序。
定义与其他特殊形式有何不同?
好吧,我想到的一件事是,大多数特殊形式 ( if
, let
) 返回正常的方案值并且可以出现在任何地方,而define
块返回值没有由标准定义,只能在顶层或正文中执行另一种特殊形式。请参阅R5Rs - 定义。