2013-06-23 2 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

는 정의 모듈에 의해 캡슐화 된 형태를 나타 내기 위해 사용 된 부호화 규칙이다. 코드 샘플에서 t은 스택 유형을 의미합니다. 기본적으로 ocaml은 모듈이있는 파일의 이름을 사용하므로, t을 Stack.t이라고합니다.

은 사용이 (가)를 OCaml의 최상위 (REPL)에서 다음을 입력 확인하고 출력을 참조하십시오. 여기

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

empty_stack 빈 스택 형이라도 Stack.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 제외 초와 동일하다. OCaml의 t에서

+0

음 ... 알 수 있습니다. 지식을 공유해 주셔서 감사합니다. – yjasrc