目录
第1章简介1
1.1不走寻常路1
1.2语言2
1.3谁应该买这本书4
1.3.1学会如何学习4
1.3.2乱世英雄4
1.4谁不应该买这本书5
1.4.1超越语法5
1.4.2不是安装指南6
1.4.3不是编程参考6
1.4.4严格督促6
1.5最后一击7
第2章Ruby8
2.1Ruby简史9
2.2第一天:找个保姆10
2.2.1快速起步10
2.2.2从命令行执行Ruby10
2.2.3Ruby的编程模型11
2.2.4判断12
2.2.5鸭子类型15
2.2.6第一天我们学到了什么16
2.2.7第一天自习16
2.3第二天:从天而降17
2.3.1定义函数17
2.3.2数组17
2.3.3散列表19
2.3.4代码块和yield20
2.3.5定义类22
2.3.6编写Mixin25
2.3.7模块、可枚举和集合26
2.3.8第二天我们学到了什么27
2.3.9第二天自习28
2.4第三天:重大改变28
2.4.1打开类29
2.4.2使用method_missing30
2.4.3模块31
2.4.4第三天我们学到了什么35
2.4.5第三天自习35
2.5趁热打铁35
2.5.1核心优势35
2.5.2不足之处37
2.5.3最后思考37
第3章Io38
3.1Io简介38
3.2第一天:逃学吧,轻松一下39
3.2.1开场白39
3.2.2对象、原型和继承40
3.2.3方法43
3.2.4列表和映射44
3.2.5true、false、nil以及单例46
3.2.6SteveDekorte访谈录48
3.2.7第一天我们学到了什么49
3.2.8第一天自习50
3.3第二天:香肠大王50
3.3.1条件和循环51
3.3.2运算符52
3.3.3消息54
3.3.4反射56
3.3.5第二天我们学到了什么57
3.3.6第二天自习57
3.4第三天:花车游行和各种奇妙经历58
3.4.1领域特定语言58
3.4.2Io的method_missing60
3.4.3并发62
3.4.4第三天我们学到了什么64
3.4.5第三天自习64
3.5趁热打铁65
3.5.1核心优势65
3.5.2不足之处66
3.5.3最后思考66
第4章Prolog67
4.1关于Prolog68
4.2第一天:一名优秀的司机68
4.2.1基本概况68
4.2.2基本推论和变量69
4.2.3填空70
4.2.4合一,第一部分73
4.2.5实际应用中的Prolog75
4.2.6第一天我们学到了什么77
4.2.7第一天自习77
4.3第二天:离瓦普纳法官开演还有15分钟78
4.3.1递归78
4.3.2列表和元组79
4.3.3列表与数学运算82
4.3.4在两个方向上使用规则83
4.3.5第二天我们学到了什么86
4.3.6第二天自习87
4.4第三天:维加斯的爆发87
4.4.1解决数独问题87
4.4.2八皇后问题91
4.4.3第三天我们学到了什么96
4.4.4第三天自习96
4.5趁热打铁96
4.5.1核心优势97
4.5.2不足之处97
4.5.3最后思考98
第5章Scala99
5.1关于Scala99
5.1.1与Java的密切关系100
5.1.2没有盲目崇拜100
5.1.3MartinOdersky访谈录100
5.1.4函数式编程与并发101
5.2第一天:山丘上的城堡102
5.2.1Scala类型102
5.2.2表达式与条件103
5.2.3循环105
5.2.4范围与元组107
5.2.5Scala中的类109
5.2.6扩展类111
5.2.7第一天我们学到了什么113
5.2.8第一天自习114
5.3第二天:修剪灌木丛和其他新把戏114
5.3.1对比var和val115
5.3.2集合115
5.3.3集合与函数119
5.3.4第二天我们都学到了什么124
5.3.5第二天自习124
5.4第三天:剪断绒毛125
5.4.1XML125
5.4.2模式匹配126
5.4.3并发128
5.4.4实际中的并发129
5.4.5第三天我们学到了什么132
5.4.6第三天自习132
5.5趁热打铁133
5.5.1核心优势133
5.5.2不足之处134
5.5.3最后思考135
第6章Erlang136
6.1Erlang简介136
6.1.1为并发量身打造137
6.1.2JoeArmstrong博士访谈录138
6.2第一天:以常人面目出现139
6.2.1新手上路140
6.2.2注释、变量和表达式140
6.2.3原子、列表和元组141
6.2.4模式匹配142
6.2.5函数144
6.2.6第一天我们学到了什么147
6.2.7第一天自习147
6.3第二天:改变结构148
6.3.1控制结构148
6.3.2匿名函数150
6.3.3列表和高阶函数150
6.3.4列表的一些高级概念153
6.3.5第二天我们学到了什么156
6.3.6第二天自习157
6.4第三天:红药丸157
6.4.1基本并发原语157
6.4.2同步消息160
6.4.3链接进程以获得可靠性162
6.4.4第三天我们学到了什么167
6.4.5第三天自习167
6.5趁热打铁167
6.5.1核心优势168
6.5.2不足之处169
6.5.3最后思考169
第7章Clojure170
7.1Clojure入门170
7.1.1一切皆Lisp170
7.1.2JVM171
7.1.3为并发更新171
7.2第一天:训练Luke172
7.2.1调用基本函数172
7.2.2字符串和字符174
7.2.3布尔值和表达式175
7.2.4列表、映射表、集合以及向量176
7.2.5定义函数179
7.2.6绑定180
7.2.7匿名函数182
7.2.8RichHickey访谈录183
7.2.9第一天我们学到了什么184
7.2.10第一天自习185
7.3第二天:Yoda与原力185
7.3.1用loop和recur递归185
7.3.2序列186
7.3.3延迟计算189
7.3.4defrecord和protocol191
7.3.5宏193
7.3.6第二天我们学到了什么194
7.3.7第二天自习195
7.4第三天:一瞥魔鬼195
7.4.1引用和事务内存196
7.4.2使用原子197
7.4.3使用代理198
7.4.4future200
7.4.5还差什么200
7.4.6第三天我们学到了什么201
7.4.7第三天自习201
7.5趁热打铁201
7.5.1Lisp悖论202
7.5.2核心优势202
7.5.3不足之处203
7.5.4最后思考204
第8章Haskell205
8.1Haskell简介205
8.2第一天:逻辑206
8.2.1表达式和基本类型206
8.2.2函数208
8.2.3元组和列表211
8.2.4生成列表214
8.2.5PhilipWadler访谈录217
8.2.6第一天我们学到了什么218
8.2.7第一天自习218
8.3第二天:Spock的超凡力量218
8.3.1高阶函数219
8.3.2偏应用函数和柯里化220
8.3.3惰性求值221
8.3.4SimonPeyton-Jones访谈录223
8.3.5第二天我们学到了什么224
8.3.6第二天自习225
8.4第三天:心灵融合226
8.4.1类与类型226
8.4.2monad231
8.4.3第三天我们学到了什么236
8.4.4第三天自习237
8.5趁热打铁237
8.5.1核心优势237
8.5.2不足之处238
8.5.3最后思考239
第9章落幕时分240
9.1编程模型240
9.1.1面向对象(Ruby、Scala)241
9.1.2原型编程(Io)241
9.1.3约束-逻辑编程(Prolog)241
9.1.4函数式编程(Scala、Erlang、Clojure、Haskell)241
9.1.5范型演进之路242
9.2并发242
9.2.1控制可变状态243
9.2.2Io、Erlang和Scala中的actor243
9.2.3future243
9.2.4事务型内存243
9.3编程结构244
9.3.1列表解析244
9.3.2monad244
9.3.3匹配245
9.3.4合一246
9.4发现自己的旋律246
附录参考书目247