### Scheme编程语言基础知识点 #### 一、简介与学习指南 《Teach Yourself Scheme in Fixnum Days》是一本详尽的教程,旨在帮助读者在有限的时间内掌握Scheme语言的基础及进阶知识。此书由Dorai Sitaram撰写,并且在网络上部分中文翻译已经存在(参考链接:http://www.cnblogs.com/heros/tag/Scheme/)。本文将基于提供的内容片段对其中的核心知识点进行总结和解释。 #### 二、数据类型 **2.1 简单数据类型** - **2.1.1 布尔值** Scheme支持两种布尔值:`#t`表示真,`#f`表示假。 - **2.1.2 数值** 包括整数、实数、复数等。 - **2.1.3 字符** 使用`#\char`形式表示字符,例如`#\a`表示小写字母a。 - **2.1.4 符号** 符号是不可变的字符串,在Scheme中通常用于标识程序中的实体,如变量名或函数名。 **2.2 复合数据类型** - **2.2.1 字符串** 字符串是由多个字符组成的序列,用双引号包围,例如`"hello"`。 - **2.2.2 向量** 向量是一种固定大小的数据结构,可以存储任意类型的值。 - **2.2.3 点对与列表** 点对是构成列表的基本单元,列表是点对的有序集合。 - **2.2.4 数据类型转换** Scheme提供了多种函数来转换不同的数据类型,如`(string->symbol "hello")`将字符串转化为符号。 **2.3 其他数据类型** 除了上述提到的数据类型之外,Scheme还支持其他类型,比如端口(port)等。 **2.4 S-表达式** S-表达式是Scheme中的基本数据结构之一,所有Scheme程序都可以被看作是S-表达式的集合。S-表达式可以是原子(如数字、字符串)或者是列表。 #### 三、表单 **3.1 函数** - **3.1.1 函数参数** 函数可以定义固定数量的参数,也可以通过`.`操作符接受额外的参数。 - **3.1.2 变参函数** Scheme允许定义接受可变数量参数的函数。 - **3.2 apply** `apply`函数用于调用一个函数,并将一个列表作为该函数的参数列表。 **3.3 顺序执行** Scheme提供了一些机制来控制代码的顺序执行。 #### 四、条件语句 **4.1 when和unless** `when`和`unless`分别用于当条件为真和为假时执行特定的代码块。 **4.2 cond** `cond`是一个更强大的条件表达式,它可以处理多个条件分支。 **4.3 case** `case`用于匹配特定的值,并执行相应的代码。 **4.4 and和or** `and`和`or`用于逻辑运算。 #### 五、词法作用域变量 **5.1 let和let\*** `let`用于局部变量的绑定,而`let*`允许按照顺序绑定多个变量。 **5.2 fluid-let** `fluid-let`允许动态地改变全局变量的值。 #### 六、递归 **6.1 letrec** `letrec`用于定义递归函数。 **6.2 Named let** `named let`是一种特殊的递归模式。 **6.3 迭代** Scheme支持尾递归优化,使得递归可以像迭代一样高效。 **6.4 映射函数** 映射函数可以应用于列表中的每一个元素。 #### 七、输入输出 **7.1 读取** Scheme提供了多种函数来读取不同类型的输入。 **7.2 写入** 同样,Scheme也支持各种写入操作。 **7.3 文件端口** - **7.3.1 自动打开和关闭文件端口** Scheme允许自动管理文件端口的打开和关闭。 - **7.4 字符串端口** 字符串端口可以用于在内存中创建虚拟文件。 - **7.5 加载文件** Scheme提供了加载外部文件的功能。 #### 八、宏 **8.1 指定扩展模板** 宏允许用户自定义新的语法结构。 **8.2 避免宏内部的变量捕获** 为了避免变量命名冲突,宏需要正确处理变量的捕获问题。 **8.3 fluid-let** `fluid-let`不仅可以用于变量绑定,还可以在宏中使用。 #### 九、结构体 **9.1 默认初始化** 结构体可以带有默认初始化值。 **9.2 定义结构体** Scheme提供了一种定义结构体的方法。 #### 十、关联列表与表格 **11.1 检查文件和删除文件** Scheme提供了一些系统接口来检查文件的存在性以及删除文件。 **11.2 调用操作系统命令** 可以使用Scheme调用外部的操作系统命令。 **11.3 环境变量** Scheme也支持访问环境变量。 #### 十一、对象与类 **12.1 简单的对象系统** Scheme虽然不是面向对象的语言,但可以通过某些技术模拟出面向对象的特性。 **12.2 类也是实例** 类本身也可以被视为对象。 **12.3 多重继承** Scheme允许实现多重继承的功能。 #### 十二、跳转 **13.1 call-with-current-continuation** 这是一个高级的控制流构造,用于处理程序的跳转。 **13.2 Escaping 继续** 通过`call-with-current-continuation`可以实现程序的非本地跳转。 **13.3 Treemat** 这部分内容未在提供的文本片段中明确提及,但可能涉及树形结构的遍历等高级主题。 以上内容是基于《Teach Yourself Scheme in Fixnum Days》的部分章节概要进行的梳理,旨在为学习者提供一个全面了解Scheme语言特性的框架。希望读者能够通过这些基础知识建立起对Scheme编程语言的初步理解,并进一步深入探索更多高级特性。
剩余130页未读,继续阅读
- tag1802013-10-28很好的资源,很有借鉴意义啊
- lookupheaven2012-07-30学习scheme很不错,这个教程也很不错,不过英文的看着很吃力
- qq_309304392015-09-10相当好的一份资源,谢谢楼主分享。
- newman33552015-09-06非常的不错啊,真实
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助