let expression: let b1, b2... in e end
bi是biding
定义局部变量
scope of binding: 在let中定义了该binding之后,以及e中都可以使用这个binding
let的类型就是e的类型
inner binding
shadow outer ones
let 也可以作为e出现在in中,bi可以是variable binding 也可以是function binding
技巧:定义
local helper function,使用上下文的值,并且在函数中调用local helper function
case expression: case x of p1 => e1 | p2 => e1
p:
pattern,作用:匹配到正确的类型,取得数据并传给local变量,供e中使用
变量pattern(如x):和值匹配, 将值绑定到变量中
C: 和没有值的Constructor匹配
C p:和有值的Constructor匹配,值和p递归匹配
(x1, x2)或者{C1:x1, C2:x2}:匹配each-of的类型
_:wildcard matching。可以匹配任何东西,不引入新的binding
数字:和数字匹配,不引入新的binding
经典pattern: [], x::xs' list
(x1, x2) tuple
{C1:x1, C2:x2} record
None, Some x1 option
nested pattern: a::(b::c)
a::(b::[])
case expression for function binding: fun f p1 = e1 | f p2 = e2...
等价于 fun f x =
case x of p1 => e1 | p2 => e2