Caml

Caml（：範疇抽象機語言），是一種函數式、指令式的程式語言。最早由法國的INRIA和ENS联合的Formel项目發展出來，是ML语言的两种方言之一，現在主要由INRIA負責維護與發展。Caml是一种语言规范；它早期有过几个实现，目前除了仍然活跃的OCaml，发布于2002年的Caml Light是Caml的另一个实现。

历史
在1981年，INRIA的，将最初的 ML适配到Multics系统的Maclisp下，并且增加了编译器。这个实现被描述于INRIA内部文档“ML手册”之中，它被开发者自称为“Le_ML”。剑桥大学的用它开发了Cambridge LCF，而剑桥大学的用它开发了第一版的。这个ML系统由INRIA和剑桥大学联合维护和发行。

基于在1985年的关于构造演算的论文，INRIA的Formel项目开始致力于参与Coq的开发。在1987年，INRIA的Ascánder Suárez，基于巴黎第七大学的的“”（CAM） LNCS, 201, Functional programming languages computer architecture, pp.~50-64. LFP '86: Proceedings of the 1986 ACM conference on LISP and functional programming, Pages 266–278.，利用Le Lisp的运行时间系统重新实现了Le_ML，并正式命名为“Caml” RT-0122, INRIA. pp.78. [Research Report] RT-0121, INRIA. pp.491.。

在1990年和1991年，INRIA的基于用C实现的字节码解释器 RT-0117, INRIA.，利用提供的内存管理系统重新实现了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

引用

Category:ML語言家族
Category:程序设计语言
Category:1985年建立的程式語言