Caml(:範疇抽象機語言),是一種函數式、指令式的程式語言。最早由法國的INRIA和ENS联合的Formel项目發展出來,是ML语言的两种方言之一,現在主要由INRIA負責維護與發展。Caml是一种语言规范;它早期有过几个实现,目前除了仍然活跃的OCaml,发布于2002年的Caml Light是Caml的另一个实现。
历史
在1981年,INRIA的,将最初的 ML适配到Multics系统的Maclisp下,并且增加了编译器,它被开发者自称为“Le_ML”。剑桥大学的用它开发了Cambridge LCF,而剑桥大学的用它开发了第一版的。这个ML系统由INRIA和剑桥大学联合维护和发行,INRIA的Formel项目开始致力于参与Coq的开发。在1987年,INRIA的Ascánder Suárez,基于巴黎第七大学的的“”(CAM),利用Le Lisp的运行时间系统重新实现了Le_ML,并正式命名为“Caml”。
在1990年和1991年,INRIA的基于用C实现的字节码解释器,利用提供的内存管理系统重新实现了Caml,并称其为“Caml Light”。在1995年,Xavier Leroy又增加了本机代码编译器和高层模块系统,这个版本也称为“Caml Special Light”。在1996年,INRIA的Didier Rémy和Jérôme Vouillon,向Caml Special Light增加了面向对象特征,从而创建了OCaml。
範例
Hello World
下面的程序hello.ml:
print_endline "Hello World!"
阶乘函数
很多数学函数,比如阶乘,可以很自然的表示为纯粹的函数形式:
let rec fact n =
if n=0 then 1 else n * fact(n - 1);;
这个函数可以使用模式匹配等价的写为:
let rec fact = function
| 0 -> 1
| n -> n * fact(n - 1);;
后者形式是阶乘作为递推关系的数学定义。
编译器将这个函数的类型推论为int -> int,意味着这个函数将int映射到int。例如,12!:
fact 12;;
- : int = 479001600
引用
评论 (0)