热门问题
时间线
聊天
视角
Caml
来自维基百科,自由的百科全书
Remove ads
Caml(英语:Categorical Abstract Machine Language:范畴抽象机语言),是一种函数式、指令式的程式语言。最早由法国的INRIA和ENS联合的Formel项目发展出来,是ML语言的两种方言之一,现在主要由INRIA负责维护与发展。Caml是一种语言规范;它早期有过几个实现,目前除了仍然活跃的OCaml,发布于2002年的Caml Light是Caml的另一个实现。
Remove ads
历史
在1981年,INRIA的Gérard Huet,将最初的LCF ML适配到Multics系统的Maclisp下,并且增加了编译器[2]。这个实现被描述于INRIA内部文档“ML手册”之中[3],它被开发者自称为“Le_ML”[4]。剑桥大学的Lawrence Paulson用它开发了Cambridge LCF,而剑桥大学的Michael J. C. Gordon用它开发了第一版的HOL[5]。这个ML系统由INRIA和剑桥大学联合维护和发行[3]。
基于Thierry Coquand在1985年的关于构造演算的论文[6],INRIA的Formel项目开始致力于参与Coq的开发。在1987年,INRIA的Ascánder Suárez,基于巴黎第七大学的Guy Cousineau的“范畴抽象机器”(CAM)[7],利用Le Lisp的运行时间系统重新实现了Le_ML,并正式命名为“Caml”[2]。
在1990年和1991年,INRIA的Xavier Leroy基于用C实现的字节码解释器[8],利用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.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
引用
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads