程序设计语言
目录
| 关于
英文版
目录
::
0.
1.
如何使用本系统
»
第 0 章
前言
¶
0.1. 如何使用本系统
第 1 章
文法
¶
1.1. 推导与语法分析树
1.1.1. 语法分析树
1.1.1.1. 第一个示例文法
1.1.2. 由文法生成的字符串
1.1.3. 刻画一个语言:例 1
1.1.4. 刻画一个语言:例 2
1.2. 二义性文法
1.2.1. 第二个示例文法
1.2.2. 文法中的二义性
1.2.3. 二义性文法 —— 第 1 部分
1.2.4. 二义性文法 —— 第 2 部分
1.2.5. 二义性文法 —— 第 3 部分
1.2.6. 发现二义性
1.3. 强制运算顺序
1.3.1. 表达式的求值
1.3.1.1. 第三个示例文法
1.3.2. 表达式求值
1.3.3. 结合性
1.3.4. 优先级与结合性
1.3.5. 给定 BNF 文法刻画一个语言
1.3.6. 扩展 BNF
1.4. 解析器生成器
1.4.1. Jison
1.4.2. 更多练习 Jison
1.5. 使用解析器生成器解释语言
1.5.1. 为 Jison 文法添加注解
第 2 章
函数式编程
¶
2.1. 列表的构建与析构
2.1.1. 使用 fp.cons 构建列表
2.1.2. 使用 fp.hd 和 fp.tl 解构列表
2.1.3. 使用 fp 模块练习列表操作
2.1.4. fp.isNull、fp.isEq 和 fp.isZero
2.2. 开发基本的递归列表处理函数
2.2.1. 递归列表处理示例:sum( list )
2.2.2. 递归列表处理示例:isMember( num, list )
2.2.3. 递归列表处理示例:subst( new, old, list )
2.3. 在不是扁平的列表上递归
2.3.1. FP 中的深层递归
2.3.2. 二叉搜索树上的深度递归
2.3.3. 使用深度递归进行练习
2.3.4. 更多关于深度递归的练习
2.4. 使用带累加器的辅助函数
2.4.1. 使用辅助函数编写 reverse 和 split 函数
2.4.2. 使用 split 函数编写排序函数
2.4.3. 累加器模式的更多练习
2.5. 作用域、闭包、高阶函数、静态绑定与动态绑定
2.5.1. 作用域、闭包、高阶函数
2.5.2. 高阶函数与匿名函数练习
2.5.3. 更多高阶函数与匿名函数练习
2.5.4. 静态绑定与动态绑定规则练习
2.6. 过程式抽象:Map、Curry 和 Compose
2.6.1. 映射模式
2.6.2. 函数组合
2.6.3. 柯里化
2.6.4. 更多柯里化
2.7. 过程抽象:过滤模式与折叠(或归约)模式
2.7.1. 过滤模式
2.7.2. 折叠/归约模式
2.7.3. 映射模式与归约模式练习
2.7.4. 归约模式更多练习
2.8. 组合 Map 与 Reduce
2.8.1. MapReduce 范式
2.9. 续传与续传传递风格
2.9.1. 尾递归函数
2.9.2. 延续传递风格
2.9.3. 延续传递风格练习题(第 1 部分)
2.9.4. 延续传递风格练习题(第 2 部分)
2.9.5. 延续传递风格练习题(第 3 部分)
2.9.6. 更多 CPS 练习
第 3 章
λ 演算
¶
3.1. lambda 演算的语法
3.1.1. lambda 演算
3.1.2. 练习:lambda 演算语法
3.1.3. 更多 lambda 演算语法练习
3.2. lambda 演算的语义
3.2.1. lambda 演算的语义
3.2.2. 练习:lambda 演算的语义
3.3. 自由变量与约束变量
3.3.1. 自由变量与约束变量
3.3.2. 识别自由变量
3.3.3. 识别约束变量
3.3.4. 自由变量的形式化定义
3.4. Alpha 转换
3.4.1. Alpha 转换规则
3.4.2. 练习:Alpha 转换
3.5. 基于替换的求值模型
3.5.1. 替换算法
3.5.2. 识别情况 1 的代换子情况
3.5.3. 识别情况 2 的代换子情况
3.5.4. 识别代换情形 3
3.5.5. 识别替换情形与子情形
3.5.6. 执行替换算法
3.6. Beta-归约
3.6.1. Beta-归约式
3.6.2. 识别 Beta-归约式
3.6.3. Beta-归约是一种替换
3.6.4. 某些 Beta-归约需要 Alpha-转换
3.6.5. 执行 Beta 归约
3.7. 归约策略
3.7.1. 应用序(Applicative Order)
3.7.2. 标准序(Normal Order)
3.7.3. Beta 归约顺序(1)
3.7.4. Beta 归约顺序(2)
3.7.5. 应用序熟练度练习
3.7.6. 标准序熟练度练习
3.8. 丘奇数与丘奇布尔值
3.8.1. 丘奇布尔值(Church Booleans)
3.8.2. 编码 If-Then-Else
3.8.3. 编码 OR
3.8.4. 丘奇数(Church Numerals)
3.8.5. 丘奇数与加法和乘法
3.9. 递归函数
3.9.1. 函数的不动点
3.9.2. Y 不动点组合子
3.9.3. 使用 Y 实现阶乘
3.9.4. 识别不动点组合子
第 4 章
解释函数式语言 SLang 1
¶
4.1. 定义 SLang 1
4.1.1. SLang 1 的语法
4.1.2. SLang 1 的具体语法
4.1.3. SLang 1 具体语法的更多练习
4.1.4. SLang 1 的抽象语法
4.1.5. SLang 1 中的 curry
4.1.6. SLang 1 的语义
4.2. 基于环境的求值模型
4.2.1. 环境数据结构
4.2.2. 确定变量所绑定的值
4.2.3. 在环境中对表达式求值
4.2.4. 确定 SLang 1 中的指称值
4.3. Let 表达式
4.3.1. Let 块
4.3.2. 作为语法糖的 Let 块
4.3.3. 嵌套 Let
4.3.4. 带闭包的嵌套 Let
第 5 章
解释命令式语言 SLang 2
¶
5.1. 定义 SLang 2
5.1.1. SLang 2:一种命令式语言
5.1.2. SLang 2 程序的输出
5.2. 打结
5.2.1. 高效地实现递归
5.2.2. 练习 TTK
第 6 章
参数传递的变体
¶
6.1. 参数传递机制
6.1.1. 按值调用与按引用调用
6.1.2. 副本-恢复
6.1.3. 宏展开
6.1.4. 按名调用
6.1.5. 对目前为止所研究的五种方法的综合复习
6.2. 惰性列表
6.2.1. 无限序列
6.2.2. 练习无限序列
6.2.3. 练习与无限序列 (2)
6.2.4. 练习与无限序列(3)
第 7 章
类型系统
¶
7.1. 程序设计语言中的类型
7.1.1. 引入示例
7.1.2. 类型系统:定义
7.1.3. 类型系统:静态与动态
7.1.4. 类型系统:安全与不安全
7.1.5. 类型系统:强类型与弱类型
7.1.6. 类型系统:类型化的变量还是值
7.1.7. 类型系统:显式类型与隐式类型
7.1.8. 类型系统的诸多用途
7.2. 类型推断
7.2.1. 类型环境
7.2.2. 用后系统表示的类型规则
7.2.3. 在简化版 ML 中的类型系统
7.2.4. 使用 Post 系统规则描述 ML 中的类型推断
7.2.5. ML 中的参数多态
7.2.6. ML 中的类型推断
7.2.7. 类型推断问题 1
7.2.8. 类型推断问题 2
7.2.9. 类型推断问题 3
7.2.10. 类型推断问题 4
7.2.11. 类型推断问题 5
7.2.12. 类型推断问题 6
第 8 章
附录
¶
8.1. 术语表
索引
搜索页面
隐私 |
| 许可协议
目录
::
0.
1.
如何使用本系统
»
小结*:
操作系统*:
Windows
Mac OS
Linux
iOS
Android
Other
浏览器*:
Chrome
Safari
Internet Explorer
Opera
Other
描述*:
附加截图(可选):