Caml(英語:Categorical Abstract Machine Language:範疇抽象機語言),是一種函數式指令式的程式語言。最早由法國的INRIAENS聯合的Formel項目發展出來,是ML語言的兩種方言之一,現在主要由INRIA負責維護與發展。Caml是一種語言規範;它早期有過幾個實現,目前除了仍然活躍的OCaml,發布於2002年的Caml Light是Caml的另一個實現。

Quick Facts 編程範型, 語言家族 ...
Caml
編程範型多范型: 函數式, 指令式
語言家族ML
設計者Gérard Huet英語Gérard Huet, Guy Cousineau, Ascánder Suárez, Pierre Weis, Michel Mauny (Heavy Caml),
Xavier Leroy英語Xavier Leroy (Caml Light)
面市時間1985年
當前版本
  • 4.07(2018年7月;穩定版本)[1]
編輯維基數據鏈接
型態系統類型推論, 靜態, 強類型
操作系統跨平台
網站caml.inria.fr
啟發語言
ML
影響語言
OCaml
Close

歷史

在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]

範例

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

引用

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.