공순호
가입: 2005년 9월 29일 올린 글: 363 위치: 302동 312-2호
|
올려짐: 2007년6월7일 22:32 주제: |
|
|
1.
말씀하신 것처럼
타입을 만들 때에는 다른 타입들을 이용해서
인용: | 무언가(?)이거나 *와 ->로 결합시켜주는 |
방법도 있지만
type variable을 이용해서, 임의의 타입을 갖는 타입을 만들어낼 수도 있습니다.
(연습 시간에 type 'a option = None | Some of 'a 에 관해서 설명드린 적이 있지요.)
이미 hw6.ex1의 스펙에도 이러한 것을 이용하고 있네요.
코드: | type 'a set = Empty | Set of 'a * 'a set |
set 타입은 Empty 이거나
임의의 타입 'a의 값과 그 값으로 만든 set을 pair로 하는 타입입니다.
ex : Empty, Set(1, Set(2, Empty) - (o)
Set(1, Set("abc", Empty) - (x)
2.
PowerSetFun에 정수를 원소로 하는 모듈 IntSet을 넣었다면
정수들의 집합을 원소로하는 모듈을 얻게 됩니다.
비유하자면,
PowerSetFun({1, 2, 3, 4, ...}) = { \phi, {1}, {2}, {3}, ... , {1, 2}, ... }
와 같이 되겠네요.
즉, PowerSetFun이 만들어내는 모듈의 원소의 type은 (즉, type t 는)
입력 받은 모듈이 표현하는 집합의 type이어야 합니다.
이제 powerset으로 가서 살펴보면
코드: | functor PowerSetFun(A:SET) =
struct
type t = A.t A.set
|
에서 마지막 줄의 A.set의 type은 'a set 입니다. (from signature)
여기서 'a에 A.t가 들어가는 것이지요.
예를 들어서 PowerSetFun의 인자로 들어오는 A에서
type set의 실제 구현을
코드: | type 'a set = Empty | Set of 'a * 'a set |
과 같이 했다고 합시다. (그리고, 아마도 이렇게 구현하겠지요?)
그렇다면
의 의미는
코드: | type t = Empty | Set of A.t * A.t A.set |
와 같이 되고
그리고 이것의 해석은
"PowerSetFun이 반환하는 모듈의 type t는 Empty이거나
A.t를 원소로 하는 집합이다."가 되겠네요.
잘 이해가 가실지 걱정이 되네요, 혹시 궁금하신 것이 더 있으시면 알려주시기 바랍니다. _________________ - soon@ropas |
|