OCaml
有如下基本类型
OCaml type Range
int 63-bit signed int on 64-bit processors, or 31-bit signed int on
32-bit processors
float IEEE double-precision floating point, equivalent to C's double
bool A boolean, written either 'true' or 'false'
char An 8-bit character
string A string (sequence of 8 bit chars)
-
OCaml 是一种强静态类型语言。这意味着每个表达式都有 一种类型,并且只有一种类型,它是在程序运行之前确定的
-
OCaml 使用类型推断来计算(推断)类型
-
OCaml 不执行任何类型的隐式转换
对于参数比较复杂的情况,OCaml
提供了模式匹配简化函数体,对于下面的这个阶乘函数
# let rec factorial n =
if n <= 1 then 1 else n * factorial (n - 1);;
val factorial : int -> int = <fun>
可以改写成,此处 _
代表与其他任何内容均匹配的模式
# let rec factorial n =
match n with
| 0 | 1 -> 1
| _ -> n * factorial (n - 1);;
val factorial : int -> int = <fun>
或者使用语法糖 function
直接模式匹配
# let rec factorial = function
| 0 | 1 -> 1
| n -> n * factorial (n - 1);;
val factorial : int -> int = <fun>
好神奇的类型推断
列表是一种常见的复合数据类型
[[1; 2]; [3; 4]; [5; 6]];;
- : int list list = [[1; 2]; [3; 4]; [5; 6]]
::
用于单个元素和列表的复合,@
用于列表和列表的复合
1 :: [2; 3] @ [5; 6];;
- : int list = [1; 2; 3; 5; 6]
还有两种方法定义复合数据类型
- 元组
tuples
# let t = (1, "one", '1');;
val t : int * string * char = (1, "one", '1')
- 记录
records
# type person =
{first_name : string;
surname : string;
age : int};;
type person = { first_name : string; surname : string; age : int; }
OCaml
同样支持自定义类型,使用 type
# type colour = Red | Blue | Green | Yellow;;
type colour = Red | Blue | Green | Yellow
# let l = [Red; Blue; Red];;
val l : colour list = [Red; Blue; Red]
使用 of
*
来在自定义类型中内嵌元组
# type colour =
| Red
| Blue
| Green
| Yellow
| RGB of int * int * int;;
type colour = Red | Blue | Green | Yellow | RGB of int * int * int
# let l = [Red; Blue; RGB (30, 255, 154)];;
val l : colour list = [Red; Blue; RGB (30, 255, 154)]
自定义类型也可以是多态和递归的,比如按如下方式可以定义一颗二叉树
# type tree =
Leaf of int
| Node of tree * tree;;
type tree = Leaf of int | Node of tree * tree
标签:Blue,入门,int,OCaml,类型,type,Red,string
From: https://www.cnblogs.com/sysss-blogs/p/17985795