let f a b = (a +. b) +. (a +. b) ** 2. ;; let f a b = let x = a +. b in x +. x ** 2. ;; 这两者都是等价的。
标准短语let name = expression in
用来定义一个命名的局部表达式。以后name
在这个函数中就可以用来代替expression
,直到一个;;
结束本代码块。注意我们在in
之后并不缩进.只要把let ... in
看作是一个整体就可以。
局部"变量"(实际是局部表达式)
我们来看C中的average
函数并且加一个局部变量。
double average (double a, double b) { double sum = a + b; return sum / 2; }
现在来对OCaml版本做同样的事:
let average a b = let sum = a +. b in sum /. 2.0;;
==============
访问一般元组内部成分的一种方法是采用基于模式匹配的扩展的let局部定义。
let a = 1, 2, 3 in
let x, y, z =a in z, y, x;;
- : int * int * int = (3, 2, 1)
"let x,y,z=a"中,等号左边的 “x,y,z”称为模式pattern,x,y,z称为模式变量,
这个let等式构成一个模式匹配操作,把x,y,z分别关联到1,2,3。