2013-06-23 103 views
0

任何特殊的意義。當我尋找到堆棧的內部類型定義:OCaml中類型定義

(*ocaml-2.04/stdlib/stack.ml*) 
type 'a t = { mutable c : 'a list } (*What does t mean here*) 
exception Empty 
let create() = { c = [] } 
let clear s = s.c <- [] 
let push x s = s.c <- x :: s.c 
let pop s = match s.c with hd::tl -> s.c <- tl; hd | [] -> raise Empty 
let length s = List.length s.c 
let iter f s = List.iter f s.c 

什麼的類型變量「t」的意思。我認爲它只能是類型定義中的原始類型。感謝您的解釋。

回答

3

在ocaml中t是用於表示由定義模塊封裝的類型的編碼約定。在您的代碼示例中,t表示堆棧類型。由於默認情況下,ocaml假定文件的名稱與模塊,t被稱爲Stack.t。

要在ocaml toplevel(REPL)中查看它的用法類型,請參閱輸出。

# let emtpy_stack = Stack.create();; 
    val empty_stack : '_a Stack.t = <abstr> 

這裏empty_stackStack.t類型的雖然是空堆棧的變量。

另外,假如你想定義一個以Stack爲參數的函數,這裏有一種用類型註釋來定義它的方法,

# let stack_func s:(int) Stack.t = s;; 
    val stack_dummy : int Stack.t -> int Stack.t = <fun> 
1

t是被定義的類型的名稱。這是一個參數化類型,需要一個參數。在定義中,參數(所謂的形式參數)被命名爲'a

它可能只是看起來很有趣,因爲它是一個字符的名稱:-)

也許這些例子將有助於澄清:

# type intsequence = int list;; 
type intsequence = int list 
# type 'a sequence = 'a list;; 
type 'a sequence = 'a list 
# type 'a t = 'a list;; 
type 'a t = 'a list 
# 

第一類沒有參數。這只是int list的同義詞。第二種類型在定義中有一個名爲'a'的參數。第三個與第二個相同,不同之處在於該類型被命名爲t而不是sequence

+0

恩......我明白了。感謝分享知識。 – yjasrc