let name = expression in定义一个命名的局部表达式 直到;;结束本代码块

局部表达式和变量不同 更类似于常量表达式 局部绑定 只能被隐藏 不能被改写

1
2
3
4
5
6
7
let f a b =
(a +. b) +. (a +. b) ** 2.
;;
let f a b =
let x = a +. b in
x +. x ** 2.
;;

可以在top level中定义全局名

引用 真正的可赋值/修改的变量

1
2
3
let my_ref = ref 0;;
my_ref := 100;;
!my_ref

类似于指针`

Nested Funcions嵌套函数

lexical scoping词法变量域

嵌套函数的格式和局部命名表达式相同。let name arguments = function-definition in.

OCaml通常将文件名的第一个字母大写作为模块名

一是在程序开头声明open Graphics;;。二是在所有函数调用前加上前缀,比如Graphics.open_graph

open类似于pythonfrom xx import *

所有Pervasives中的符号会被自动引入所有的OCaml程序中。

重命名模块 module Gr = Graphics;;

;被称为sequence point序列点 也是一个运算符 unit -> 'b -> 'b接受两个值并返回第二个