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