1.1 Scheme

Scheme 是 Lisp 编程语言的一种方言,由 Guy Lewis Steele Jr. 和 Gerald Jay Sussman 于 20 世纪 70 年代中期发明。第一个 Lisp 语言是 LISP,由 John McCarthy 于 20 世纪 50 年代后半期创建。

Lisp 的语法使用 S-表达式,它们由 McCarthy 创建, 用于在他的 eval 函数中将 LISP 函数表示为数据 (发表于 1960 年)。Eval 是一个只有一页的通用 LISP 函数, 能够运行任何其他 LISP 函数。第一个 LISP 解释器 是 Steve Russell 手工编译 eval 函数时 创建的。

今天,许多语言提供了 Lisp 的大量子集特性, 有些甚至试图提供 Scheme 的特性。S-表达式没有被加入 是因为那会使这些语言变成 Lisp。

Lisp 语言的显著特性包括动态类型、垃圾回收 和 S-表达式("符号表达式")。Scheme 在 这些基础上增加了一些额外的显著特性:静态作用域、 正确的尾递归、卫生宏、完整续延和 dynamic-wind。

上述特性可以在缺乏它们的语言中被模拟。 尾递归可以通过用列表模拟栈来手动实现, 动态类型可以通过抽象数据类型和类型分派来实现, 垃圾回收可以为某个数据结构实现, 而续延可以通过续延传递风格来手动实现。

从任何图灵完备的语言都可以实现任何其他图灵完备的 语言的意义上来说,这样的模拟总是可能的。 但这些模拟不会存在于与宿主语言相同的 层次上,因此本质上更低劣。