Scheme语言入门中文教程:掌握编程基础与核心概念
5星 · 超过95%的资源 需积分: 49 187 浏览量
更新于2024-07-19
2
收藏 9.43MB PDF 举报
"scheme语言中文教程"
Scheme是一种基于Lisp家族的函数式编程语言,它以其简洁的语法和强大的表达能力而闻名。这个中文教程旨在帮助初学者深入理解Scheme语言的基本概念、语法规则以及编程实践。
1. **过程调用(procedure call)**:在Scheme中,调用函数或过程是通过`(`和`)`来实现的,参数列表放在括号内,如`(add1 2)`,表示调用名为`add1`的过程,并传入数字2作为参数。
2. **过程(procedure)?**:`procedure?`是 Scheme 中的一个内建函数,用于检测一个对象是否为过程。例如 `(procedure? add1)` 返回 `#t` 表示 `add1` 是一个过程。
3. **承诺(promise)**:在 Scheme 中,承诺是延迟计算的一种机制,它返回一个对象,该对象在未来某个时刻才会被求值。`promise`常用于实现惰性求值。
4. **严格尾递归(tail recursion)**:Scheme 支持严格尾递归优化,这意味着在尾部位置的递归调用不会增加调用栈的深度,从而避免了堆栈溢出的问题。
5. **quasiquote(准引用)** 和 **quote**:这两个都是用于创建不可变数据结构的特殊形式。`quote`用来阻止表达式的求值,如`(quote (a b c))`将得到列表`(a b c)`。`quasiquote`允许部分展开,如`(quasiquote (a ,b c))`,其中`b`会求值,`a`和`c`保持不变。
6. **quotient**:这是 Scheme 内置的除法运算符,返回两个数相除的整数部分。
7. **rational?**,**rationalize** 和 **real?**:这些函数用于处理复数和有理数。`rational?`判断一个对象是否为有理数,`rationalize`将一个浮点数转换为最简有理数,`real?`则检查对象是否为实数。
8. **referentially transparent(引用透明)**:这是一个编程原则,意味着一个表达式的结果只取决于其自身的值,而不依赖于任何外部状态。在 Scheme 中,大部分情况都遵循这一原则。
9. **region(作用域)**:在 Scheme 中,变量的作用域分为局部作用域(如过程内部)和全局作用域。变量的生命周期和可见性由作用域规则决定。
10. **remainder**:返回两个数相除的余数。
11. **reverse**:反转列表的函数,例如 `(reverse '(1 2 3))` 返回 `(3 2 1)`。
12. **scheme-report-environment**:获取 Scheme 标准报告环境,通常用于查找特定版本的 Scheme 定义。
13. **set!**,**set-car!** 和 **set-cdr!**:这些操作符用于修改列表中的元素。`set!`改变变量的值,`set-car!`和`set-cdr!`分别改变列表第一个元素和剩余部分的值。
14. **string** 相关函数:如 `string->list`、`string->number`、`string->symbol`、`string-append` 等,提供了字符串与列表、数字、符号之间的转换,以及字符串操作如拼接、比较和长度查询。
15. **symbol?** 和 **symbol->string**:`symbol?`检查对象是否为符号,`symbol->string`则将符号转换为字符串。
16. **syntactic keyword(语法关键字)**:在 Scheme 的语法定义中,语法关键字用于构建新的语法结构。
17. **syntax definition** 和 **syntax-rules**:这两个是宏系统的一部分,允许用户自定义语法扩展。
18. **#t** 和 **#f**:分别代表真和假,是 Scheme 的布尔值。
19. **tail call(尾调用)**:在 Scheme 中,尾调用是指在函数返回时,调用另一个函数,且调用是函数体的最后一个动作。 Scheme 会优化这种调用,避免栈溢出。
20. **tan**:正切函数,返回角度的正切值。
21. **token**:在 Scheme 解析输入时,将源代码分割成一个个的标记,用于编译或解释。
22. **toplevel environment(最高层环境)**:Scheme 的顶级环境是程序开始执行的地方,也是全局变量的所在。
23. **transcript-off** 和 **transcript-on**:用于控制调试输出的开关。
24. **true**:在 Scheme 中,`true` 是布尔值 `#t` 的别名,表示真。
25. **truncate**:截断浮点数,返回最接近的整数。
26. **type**:虽然 Scheme 是动态类型语言,但了解对象的类型可以帮助调试和理解代码行为。
27. **unbound**:在 Scheme 中,试图访问未绑定的变量会导致错误。
28. **unquote** 和 **unquote-splicing**:在 quasiquote 结构中,`unquote` (`,)` 引用表达式并求值,`unquote-splicing` (`,@`) 将列表插入到 quasiquote 结构中。
29. **unspecified(未定义)**:当一个表达式没有明确定义的结果时,Scheme 可能返回 `unspecified`。
以上内容仅是 Scheme 语言中文教程中的一部分,完整的教程将覆盖更多主题,包括更多的内建函数、宏、异常处理、文件操作等,帮助学习者全面掌握 Scheme 语言的精髓。
2016-02-21 上传
2019-09-18 上传
2023-09-19 上传
2024-06-14 上传
2023-05-24 上传
2023-09-12 上传
2023-05-22 上传
2024-01-05 上传
microflow_cfd
- 粉丝: 11
- 资源: 4
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍