卫生宏技术
翻译术语对照
| 英文 |
中文 |
| macro |
宏 |
| naive |
朴素 |
| sound |
可靠 |
| unsound |
不可靠 |
| elimination rule |
消去规则 |
| hygiene |
卫生 |
| hygienic macro |
卫生宏 |
第1章 捕获问题
宏的本质是在一段代码里将一个表达式替换为另一个表达式.
正如逻辑学和lambda演算中为人所熟知的, 朴素替换是不可靠的. 例如, 考虑一阶逻辑的全称消去规则. 这条规则经常被陈述为
其是说
第2章 卫生之前的Lisp宏
第3章 卫生之前的Scheme宏
Scheme编程语言由Guy L Steele Jr和Gerald J Sussman于1975年设计和实现. 鉴于Scheme起初被构想为Carl Hewitt的Actor模型的一个顺序实现 [Steele and Gabriel 1993a; Clinger 2008], 其与(当时)大多数其他的Lisp方言在以下方面有所不同:
- 正确尾递归 (于是过程调用不会施行没有必要的压栈操作)
- 第一级延续 (所有那时已知的顺序控制结构均可由此合成)
- 词法作用域 (如lambda演算, Algol, 以及其他许多块结构语言)
- 第一级过程 (如lambda演算)
- 一致的求值 (如lambda演算)
- 统一的环境 (如lambda演算)
根据上述的最后四点, Scheme在lambda演算的意义下是一个高阶语言:
第4章 Kohlbecker的算法
现在我们考虑Kohlbecker算法, 其似乎是第一个全然可靠的技术, (1) 赋予了程序员以避免意外捕获的力量, (2) 被实际实现.
第4.1节 Kohlbecker的术语
第4.2节 目标和设计决策
第4.3节 其是如何工作的
第5章 国家和国际标准
第6章 句法闭包的兴起与衰落
第7章 行之有效的宏
第8章 强卫生性被发现压根不那么强
第9章 syntax-case
第10章 从R4RS到R5RS
第11章 从R5RS到R6RS
第12章 从R6RS到R7RS
第13章 绑定作为作用域集合