이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
woojin444
가입: 2017년 9월 6일 올린 글: 2
|
올려짐: 2017년12월8일 16:26 주제: 7-1 질문 |
|
|
과제 7-1에
코드: | let check : M.exp -> M.typ = |
로 되어있는데 M.typ은 이렇게 정의되어있습니다
코드: | (* type in M *)
type typ = TyInt (* integer type *)
| TyBool (* boolean type *)
| TyString (* string type *)
| TyPair of typ * typ (* pair type *)
| TyLoc of typ (* location type *) |
그럼 poly_checker.ml 에 있는
코드: | type typ =
| TInt
| TBool
| TString
| TPair of typ * typ
| TLoc of typ
| TFun of typ * typ
| TVar of var
(* Modify, or add more if needed *) |
은 사용하면 안되는건가요?
poly_checker 에 있는 typ 을 바꾸라고 되어있는데 TInt, TBool 을 check 에 쓰면 compile error 가 뜨네요.
제가 문제를 잘못이해하고 있는건가요? |
|
위로 |
|
|
김성국17
가입: 2017년 9월 15일 올린 글: 16
|
올려짐: 2017년12월8일 21:02 주제: |
|
|
M.typ 은 타입 추론의 결과물이고,
추론 과정 중에 실질적으로 사용하는 것은 Poly_checker.typ 으로 보입니다.
또, 바꾸라는 것은 꼭 바꿔야 된다가 아니라 타입추론에 필요하다면 새로운 타입을 변경/추가 가능하다는 의미같습니다. |
|
위로 |
|
|
신원준
가입: 2017년 9월 12일 올린 글: 23
|
올려짐: 2017년12월13일 5:02 주제: |
|
|
poly_checker.ml 안에 있는 타입만 다루면서 타입체크 하시면 되고,
리턴은 m.ml에 있는 타입으로 리턴해야 하므로 이를테면 다음과 같이 짜면 됩니다. (마지막에 최종 결과 타입만 변경하면 되죠)
코드: |
let rec typeConv : typ -> M.typ = function
| TInt -> M.TyInt
| TBool -> M.TyBool
| TString -> M.TyString
| TPair (t1, t2) -> M.TyPair (typeConv t1, typeConv t2)
| TLoc (t) -> M.TyLoc (typeConv t)
| _ -> raise (M.TypeError "invalid result type") |
|
|
위로 |
|
|
|