1 / 2
04 / 17 · Lists and Patterns
列表不是数组
:: 在头部加一个元素,便宜。@ 会把左边整条复制掉。
列表是不可变的单链表。1 :: 2 :: [] 从右往左长,因为 :: 右结合。取头用模式 first :: _,匹配不上空列表时会在运行时失败。
分号分隔元素,逗号做元组。这是书里最容易写错的一个字符。
例子
utop
let languages = ["OCaml"; "Perl"; "C"]val languages : string list = ["OCaml"; "Perl"; "C"]
let my_favorite (first :: _) = firstval my_favorite : 'a list -> 'a = <fun>
my_favorite languages- : string = "OCaml"
1 :: 2 :: []- : int list = [1; 2]
改一改
改完再跑
解释器覆盖书前半的核心:函数、标签参数、模式、记录、变体、ref、模块,以及简化的 Map 和 JSON。没有 GADT 细化、Async 和独立编译。
先预测,再对照
2 / 2