Caml

来自Local Chinese Wikipedia
跳转到导航 跳转到搜索

页面Module:Infobox/styles.css没有内容。

Caml
编程范型多范型: 函数式, 指令式
语言家族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.inria.fr
受影响于
ML
影响语言
OCaml

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

历史[编辑]

在1981年,INRIApackage.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年,INRIApackage.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. 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. 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
  3. package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
  4. package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
  5. package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
  6. 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.
  7. package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found RT-0117, INRIA.
  8. package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
  9. package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found
  10. 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
  11. package.lua第80行Lua错误:module 'Module:Citation/CS1/Identifiers' not found