球拍和计划有什么不同?

球拍是Scheme的后代。球拍和R6RS有什么不同?它增加了什么,拿走了什么,还是只是不同?

我知道球拍不仅仅是一门语言,它还是一个语言平台。但我指的是球拍族的主要方言。

64218 次浏览

举个大例子,球拍列表在默认情况下是不可变的,而Scheme列表是可变的。球拍还包括许多其他方案没有的标准库(例如Web Server)。

如上所述,它包含不可变列表。它还包含一个结构系统,比R6RS记录系统更清晰一些。它有一个面向对象的类和对象系统。它具有契约式设计的本机支持。它有一个类似ML模块系统的单元系统,也有一个类似R6RS模块系统的模块系统。我肯定我忘记了我提到的很多事情。

我不确定这个名字除了营销噱头之外还有什么用处,但球拍绝对是一种独特的方案方言。

球拍最终基于R5RS,而不是R6RS,也不是严格的R6RS超集。我不认为它可以被称为“Scheme”,因为它不向后兼容任何Scheme标准。

大多数实现提供了扩展,但在其他方面是向后兼容的,当然,球拍附带的编译器也可以在R5RS或R6RS模式下运行。在球拍模式下运行的有效R5/6RS方案可能会被拒绝,导致运行时错误,或表现与应有的不同。话虽如此,它不向后兼容的主要点是:

  • 球拍没有set-cdr!set-car!,而是set-mcar!,它只适用于特别创建为可变的对。
  • 球拍所称的letrec在R6RS中被称为letrec*,在R5RS中不存在,R5RS和R6RS所称的letrec在球拍中不存在。
  • 在球拍中,很多东西都是自我评估的,这会在R5RS, 最重要的是空列表中产生错误。
  • 球拍是大小写敏感的,尽管R6RS也是大小写敏感的
  • 球拍将( ... )[ ... ]视为等效,R5RS不是,但R6RS是。

可能还有更多,但在大多数其他部分,球拍是Scheme的超集。

讨论了从PLT Scheme到球拍的名称更改的基本原理。

球拍包含了很多R6RS方案中不包含的非常好的语言构造,比如“匹配”

Scheme编程语言的语言规范R5RS基于多个Scheme实现者之间的共识。这意味着语言是非常稳定的。这也意味着许多有用的特性不是R5RS标准的一部分。

球拍在R5RS的基础上进行了很大的扩展。有些扩展被定义为宏,但有些特性需要运行时系统的支持。

球拍中不能单独通过宏实现的特性:

  • 带分隔符的延续(比call/cc更通用)
  • 延续标记
  • 线程
  • 的地方
  • ffi
模块和宏系统比RnRS规范更通用。 与#lang阅读器/语言规范一起,可以定义自定义语言(使用自定义语法),并将它们用于正常的球拍程序。< / p >

在少数情况下,球拍有行为偏离R5RS的构造。最明显的是让cons构造一个不可变对(mcons构造一个可变对)。拥有不可变对的一个好处是length现在在O(1)平摊时间内运行。