Scheme中的基本过程和特殊形式



在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

最新更新