REAL WORLD OCAML
骆驼书桌
跟着免费的第二版,把书里的例子改到自己会写。类型、模式、模块,一次一课。
已掌握 0 / 17
两种数字
OCaml 不把 int 和 float 混在一个运算符里。
从第一课开始语言本身
Language Concepts
从计算器走到模块。这些例子能在书桌里改完就跑。
- 01两种数字OCaml 不把 int 和 float 混在一个运算符里。8 分
- 02let 与函数函数就是值。类型是推出来的,不用先写签名。10 分
- 03标签、可选参数、管道Base 把容易看反的参数标上 ~f、~sep。顺序可以调。12 分
- 04列表不是数组:: 在头部加一个元素,便宜。@ 会把左边整条复制掉。10 分
- 05用模式把列表拆开destutter 是书里的例子:去掉相邻重复。12 分
- 06List 模块,而不是手写递归map、filter、fold 是同一条链表的三种看法。10 分
- 07尾递归递归调用如果是「做完才能返回」,栈会跟着列表长。10 分
- 08没有的值写成 None找不到不是异常。option 逼你在类型里把「没有」写出来。8 分
- 09记录与函数式更新{ p with y = 0. } 造一条新记录,p 还是原来的 p。10 分
- 10变体:一组互斥的形状颜色可以是命名色、RGB,或一个灰度。match 要把形状走完。12 分
- 11可预期的失败用 Result除以零是业务上可能发生的事,不必先变成异常。10 分
- 12ref 与 for需要状态时,把可变的那一格单独框起来。10 分
- 13模块是一层墙struct 是实现。签名决定外面能看见什么。12 分
程序里的形状
Tools and Techniques
Map 和 JSON。库是简化过的,类型的形状跟书一致。
类型与内存
Compiler and Runtime
GADT 细化类型,次堆为什么便宜。这两课靠推演,不靠编译。
例子按 Anil Madhavapeddy、Yaron Minsky、Jason Hickey 的 Real World OCaml 第二版编排。正文在 dev.realworldocaml.org,这里是练习,不是书的复制。