热门问题
时间线
聊天
视角

Caml

来自维基百科,自由的百科全书

Remove ads

Caml(英语:Categorical Abstract Machine Language:范畴抽象机语言),是一种函数式指令式的程式语言。最早由法国的INRIAENS联合的Formel项目发展出来,是ML语言的两种方言之一,现在主要由INRIA负责维护与发展。Caml是一种语言规范;它早期有过几个实现,目前除了仍然活跃的OCaml,发布于2002年的Caml Light是Caml的另一个实现。

事实速览 编程范型, 语言家族 ...
Remove ads

历史

在1981年,INRIAGérard Huet英语Gérard Huet,将最初的LCF英语Logic for Computable Functions ML适配到Multics系统的Maclisp下,并且增加了编译器[2]。这个实现被描述于INRIA内部文档“ML手册”之中[3],它被开发者自称为“Le_ML”[4]剑桥大学Lawrence Paulson英语Lawrence Paulson用它开发了Cambridge LCF,而剑桥大学Michael J. C. Gordon英语Michael J. C. Gordon用它开发了第一版的HOL英语HOL (proof assistant)[5]。这个ML系统由INRIA剑桥大学联合维护和发行[3]

基于Thierry Coquand英语Thierry Coquand在1985年的关于构造演算的论文[6]INRIA的Formel项目开始致力于参与Coq的开发。在1987年,INRIA的Ascánder Suárez,基于巴黎第七大学Guy Cousineau法语Guy Cousineau的“范畴抽象机器英语Categorical abstract machine”(CAM)[7],利用Le Lisp的运行时间系统重新实现了Le_ML,并正式命名为“Caml”[2]

在1990年和1991年,INRIAXavier Leroy英语Xavier Leroy基于用C实现的字节码解释器[8],利用Damien Doligez英语Damien Doligez提供的内存管理系统重新实现了Caml,并称其为“Caml Light”[9]。在1995年,Xavier Leroy又增加了本机代码编译器和高层模块系统[10],这个版本也称为“Caml Special Light”。在1996年,INRIA的Didier Rémy和Jérôme Vouillon,向Caml Special Light增加了面向对象特征[11],从而创建了OCaml[12]

Remove ads

范例

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

引用

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads