Ch1 概述
本手册详细描述了 MIT/GNU Scheme 运行时系统。它旨在成为程序员的参考文档。它不描述如何运行 Scheme 或如何与它交互,这部分内容在 《 MIT/GNU Scheme User's Manual》中。
本章总结 Scheme 的语义,简要描述 MIT/GNU Scheme编程环境,解释该语言的语法和词汇约定。随后的章节描述特殊形式、大量数据抽象以及输入和输出设备。
在本手册中,我们将经常提到 “标准 Scheme” 。“标准 Scheme” 是 William Clinger,Jonathan Rees 等人修订的 《Report on the Algorithmic Language Scheme ( Revised 4)》或由IEEE 标准1178-1990 《 IEEE Standard for the Scheme Programming Language》中定义的语言(事实上,本手册中的几个部分都是从修订报告中复制过来的)。MIT/GNU Scheme 是标准 Scheme 的扩充。
以下是 Scheme 语言的几个显著语义特征:
(1) 变量是静态的
Scheme 是静态程序语言,这意味着变量的每一次使用与该变量的词汇表现绑定相关联。(这里翻译的感觉不对,请大家帮忙)Algol 是另外一个静态语言。
(2) 类型是隐藏的
与显示类型相不同,Scheme 是隐藏类型。这意味着在 Scheme 中,类型与值(或对象)相关联,而不是与变量相关联。其他隐藏类型的语言(也称为弱类型或动态类型语言)包括 APL,Snobol 和 Lisp的其他方言。显示类型的语言(有时也称为强类型或静态类型语言)包括 Algol 60, Pascal 和 C。
(3) 对象具有无限范围
在 Scheme 计算期间,创建的所有对象(包括过程和延续)具有无限范围,且任何 Scheme对象都不会被破坏。系统不会耗尽内存,因为当未来的计算可能不会需要某些对象时,垃圾收集器会回收对象占用的存储。其他一些具备大多数对象具有无限范围特性的语言有 APL 和其他 Lisp 方言。
(4) 真尾递归
Scheme 是真正意义上的尾递归,这意味虽然迭代计算从语法上是由递归过程描述的,但它可以在常数空间中发生。通过尾递归操作,您可以使用普通过程 -------- 调用机制来表示迭代;特殊的迭代表述只是为了语法上的方便。
(5) 过程是对象
Scheme 过程是对象,这意味着你能动态的创建他们,把他们存储在数据结构里,把他们作为其他过程的结果进行返回,等等。其他拥有类似过程对象的语言有 Common Lisp、ML。
(6) continuations 是显示的( continuations 怎么翻译更贴切,需要大家帮助)
在大多数其他语言中,continuations 在后台工作。在 Scheme 中,continuations 是对象。你可以通过使用 continuations 来实现各种高级控制结构,包括非本地出口,回溯和协同路由。
(7) 参数是按值传递的
Scheme 过程的参数是按值传递的,这意味着 Scheme 过程在获得控制权之前会计算参数表达式,无论过程是否需要这个计算结果。ML,C 和 APL 是另外三个值传递的语言。SASL 和 Algol 60 语言与此不同,除非过程需要那些值,否则参数表达式不会被计算。
Scheme 使用波兰括号列表符号描述程序和(其他)数据。Scheme 的语法像大多数 Lisp 方言一样,在很大程度上因为其简单性而提供了强大的表达能力。(以下这句话翻译的是否合适?)这种简单性的一个重要结果是 Scheme 程序和数据易受其他 Scheme 程序的同意处理。与其他 Lisp 方言一样, read 原语解析其输入;也就是说,它对所读内容执行语法和此法的分解。