【OCaml使用手册】
本文用于课程《程序设计语言原理》的学习。
参考:乔治会写代码了吗 的个人主页 - 动态 - 掘金
官网:Welcome to a World of OCaml
OCaml is a general-purpose, industrial-strength programming language with an emphasis on expressiveness and safety.
OCaml 最早称为 Objective Caml,是 Caml 编程语言的主要实现,开发工具包含交互式顶层解释器,字节码编译器以及最优本地代码编译器。Ocaml 有一个巨大标准库,使得可以像 Python 或者 Perl 语言一样可以方便地开发各种应用程序。
基本语法
基本运算
整型操作需要使用:+
、-
、*
、/
(向下取整)
浮点数操作需要使用:+.
、-.
、*.
、/.
区域操作:mod
布尔运算:&&
、||
、not
等于和不等于:=
、<>
字符串相加:^(字符为 'a'
,而字符串为 "a"
)
1 | 3 + 3;; |
类型转换
固定格式:DEST_of_ORIG
例如:int_of_float
表示浮点数到整型的转换
函数
在 OCaml 中,使用关键字 let
定义一个函数
- 函数定义:
1 | (*不指定类型的函数 参数之间由空格空开 等号为函数返回值*) |
函数调用:
1
f 1 2;;
使用
let
定义函数常量
1 | let pi = 3.1415926 |
- 关键字
in
1 | (*不能使用靠前的函数来定义后面的函数 下面语法会报错*) |
条件及匹配模式
if 和 else
OCaml中的条件语句是作为表达式来用的,最终会得到一个结果
1 | (*x为bool类型的表达式 a、b类型要一致 else必须有!*) |
匹配模式
除了 if
/else
之外,OCaml 还为我们提供另一种更强有力的创造条件的方式:匹配模式(有点像其他语言中 switch
的感觉)。通常而言是列出所有可能的情况,并将一种情况与一个值联结在一起,这和 if
/else
是有些相像的。 匹配模式有趣的地方就在于,它可以准确地辨认出模式,而不仅仅是简单的等式。
OCaml中,匹配模式的语法会使用关键词 match
和 with
:
1 | (* x:将要被测试的值,如果值与列表中的某一项相匹配就返回对应情况的结果 *) |
建立数据模型
我们目前为止只是使用了一些简单的数据类型,如果实现更复杂的功能,就要自己创建更为复杂的数据类型(类似于其他语言中的类或者结构体)
同义类型
类似于取别名
1 | (* 基本语法 *) |
乘积类型
乘积类型是将几个不同的值组合起来,我们也称之为多元组/元组
1 | (* 基本语法 *) |
加法类型
1 | (* 基本语法 *) |
关联数据和constructor
我们还可以选择将信息和constructor
关联在一起。为了能够更精确描述信息们的类型,我们在constructor
的名字后使用关键词of
,of
后面可以接我们的目标类型。
1 | type resultat = | Ok of float (* 我们将float与builder OK关联 *) | Error (* 我们可以使用这个类型来实现一个不会崩溃的除法函数。 * 如果出现错误,它将会返回Error,处理除法失败的情况也是必要的 *) let div (x : float) (d : float) : resultat = if d = 0.0 then Error (* Division by 0 impossible *) else Ok(x /. d) (* 就是在这里使用与数据关联的builder *) |