Caml
页面Module:Infobox/styles.css没有内容。
| 编程范型 | 多范型: 函数式, 指令式 |
|---|---|
| 语言家族 | ML |
| 设计者 | package.lua第80行Lua错误:module 'Module:Ilh/data' not found, Guy Cousineau, Ascánder Suárez, Pierre Weis, Michel Mauny (Heavy Caml), package.lua第80行Lua错误:module 'Module:Ilh/data' not found (Caml Light) |
| 发行时间 | 1985年 |
| 当前版本 | Template:Software version |
| 型态系统 | 类型推论, 静态, 强类型 |
| 操作系统 | 跨平台 |
| 网站 | caml |
| 受影响于 | |
| ML | |
| 影响语言 | |
| OCaml | |
Caml(Template:Langx:范畴抽象机语言),是一种函数式、指令式的程式语言。最早由法国的INRIA和ENS联合的Formel项目发展出来,是ML语言的两种方言之一,现在主要由INRIA负责维护与发展。Caml是一种语言规范;它早期有过几个实现,目前除了仍然活跃的OCaml,发布于2002年的Caml Light是Caml的另一个实现。
历史[编辑]
在1981年,INRIA的package.lua第80行Lua错误:module 'Module:Ilh/data' not found,将最初的package.lua第80行Lua错误:module 'Module:Ilh/data' not found ML适配到Multics系统的Maclisp下,并且增加了编译器[1]。这个实现被描述于INRIA内部文档“ML手册”之中[2],它被开发者自称为“Le_ML”[3]。剑桥大学的package.lua第80行Lua错误:module 'Module:Ilh/data' not found用它开发了Cambridge LCF,而剑桥大学的package.lua第80行Lua错误:module 'Module:Ilh/data' not found用它开发了第一版的package.lua第80行Lua错误:module 'Module:Ilh/data' not found[4]。这个ML系统由INRIA和剑桥大学联合维护和发行[2]。
基于package.lua第80行Lua错误:module 'Module:Ilh/data' not found在1985年的关于构造演算的论文[5],INRIA的Formel项目开始致力于参与Coq的开发。在1987年,INRIA的Ascánder Suárez,基于巴黎第七大学的package.lua第80行Lua错误:module 'Module:Ilh/data' not found的“package.lua第80行Lua错误:module 'Module:Ilh/data' not found”(CAM)[6],利用Le Lisp的运行时间系统重新实现了Le_ML,并正式命名为“Caml”[1]。
在1990年和1991年,INRIA的package.lua第80行Lua错误:module 'Module:Ilh/data' not found基于用C实现的字节码解释器[7],利用package.lua第80行Lua错误:module 'Module:Ilh/data' not found提供的内存管理系统重新实现了Caml,并称其为“Caml Light”[8]。在1995年,Xavier Leroy又增加了本机代码编译器和高层模块系统[9],这个版本也称为“Caml Special Light”。在1996年,INRIA的Didier Rémy和Jérôme Vouillon,向Caml Special Light增加了面向对象特征[10],从而创建了OCaml[11]。
范例[编辑]
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
引用[编辑]
- ↑ 1.0 1.1 package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found RT-0122, INRIA. pp.78.
package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found [Research Report] RT-0121, INRIA. pp.491. - ↑ 2.0 2.1 package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found - ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found LNCS, 201, Functional programming languages computer architecture, pp.~50-64.
package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found LFP '86: Proceedings of the 1986 ACM conference on LISP and functional programming, Pages 266–278. - ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found RT-0117, INRIA.
- ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
- ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found - ↑ package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found