최민아
가입: 2009년 9월 28일 올린 글: 236
|
올려짐: 2012년11월26일 16:38 주제: 모듈 사용법 |
|
|
숙제를 위해 모듈 사용법을 간단하게 적습니다.
모듈은 정의들의 집합입니다. 예를 들면
| 코드: | module MyStack =
struct
type t = int list
exception Empty
let empty = []
let push x t = x :: t
let pop t =
match t with
[] -> raise Empty
| h::t -> (h, t)
let first t =
match t with
[] -> raise Empty
| h::t -> h
end
let s1 = MyStack.push 3 (MyStack.empty) in
let s2 = MyStack.push 4 s1 in
let (x, stack) = MyStack.pop s2 in
x;;
- : int = 4 |
숙제에 주어진 signiture를 사용하면 모듈의 정의 중 일부를 숨길 수 있습니다. signiture는 일종의 인터페이스입니다.
| 코드: | module type MYSTACK =
sig
type t
exception Empty
val empty : t
val push : int -> t -> t
val pop : t -> int * t
end |
와 같이 정의하고 나서
| 코드: | # module AbstractStack = (MyStack : MYSTACK);;
module AbstractStack : MYSTACK
# AbstractStack.first [1;2;3] ;;
Unbound value AbstractStack.first |
와 같이 signiture를 사용해 스택을 정의하면, signiture에 정의되지 않은 first 함수를 사용할 수 없습니다.
과제에서는 주어진 signiture에 해당하는 모듈을
| 코드: | module .. =
struct
...
end |
와 같이 정의하면 됩니다. |
|