我注意到人们在Stack Overflow(以及其他网站上)经常将Scheme和Racket视为同一种语言。例如,关于Scheme的问题通常会在Racket中得到解决。如果您查看标记为scheme的问题,您会发现其中有一半答案以#lang racket
开头。
这两种语言是否真的如此相似,可以被认为是相等的? Racket只是Scheme的扩展(即,在Racket解释器上始终可以运行Scheme代码)吗?
我想强调的是,这不是一个争论,只是一个正在学习Scheme编程语言的人的问题。
我注意到人们在Stack Overflow(以及其他网站上)经常将Scheme和Racket视为同一种语言。例如,关于Scheme的问题通常会在Racket中得到解决。如果您查看标记为scheme的问题,您会发现其中有一半答案以#lang racket
开头。
这两种语言是否真的如此相似,可以被认为是相等的? Racket只是Scheme的扩展(即,在Racket解释器上始终可以运行Scheme代码)吗?
我想强调的是,这不是一个争论,只是一个正在学习Scheme编程语言的人的问题。
Racket非常接近Scheme,实际上直到两年前它还被称为PLT Scheme。
然而,在Racket中使用的默认语言在一些地方与Scheme有所不同(最显著的是它具有不可变的对)。这并不是什么新鲜事:当它被称为PLT Scheme时,它就有类似的差异。这也不是Racket独有的:Scheme标准非常简约,定义的语言是不实用的,这意味着所有 Scheme实现都会添加自己的扩展。Racket案例中另一个重要点是定义新方言非常容易 - Racket 实现了一个严格的R5RS方言(由于其严格性,它并不是很有用),同时它也实现了一个R6RS方言。