小编典典

Racket 与 Scheme 有何不同?

all

Racket 是 Scheme 的后代。Racket 与 R6RS 有何不同?它增加了什么,带走了什么,或者只是不同?

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


阅读 140

收藏
2022-07-04

共1个答案

小编典典

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

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

  • Racket 没有set-cdr!and set-car!set-mcar!它只适用于专门创建为可变的对。
  • Racket 调用的内容在 R6RS 中letrec调用letrec*,在 R5RS 中不存在,R5RS 和 R6RS 调用letrec在 Racket 中不存在。
  • 在 Racket 中,很多东西都是自我评估的,这会在 R5RS 中引发错误, 最重要的是空列表
  • Racket 区分大小写,尽管 R6RS 也区分大小写
  • Racket 将( ... )[ ... ]视为等效,R5RS 没有,但 R6RS 有。

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

2022-07-04