이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
박성원
가입: 2015년 9월 1일 올린 글: 19
|
올려짐: 2015년12월15일 1:04 주제: 과제 8-1번 테스트케이스 몇 가지 |
|
|
구현하기에 따라서 어려울 수도[?] 있는 케이스 몇 가지 공유해봅니다...
코드: |
let rec f = fn x=>
let rec g = fn x =>
f x
in
g x
end
in
f;
(f true) + 1;
(f 1) and false
end
|
bool
코드: |
let val f = fn x =>
(write x) = (write x)
in
(f 1, f "a")
end
|
(bool, bool)
(김형모님께서 만들어주셨습니다)
코드: |
let val f = fn x => fn y =>
write (x = y)
in
(f (malloc 1)) (malloc true)
end
|
type error
(김형모님께서 만들어주셨습니다)
코드: |
let val f = fn x => fn y =>
write (x = y)
in
(f (malloc 1)) (malloc 3)
end
|
bool |
|
위로 |
|
|
김형모
가입: 2014년 9월 3일 올린 글: 37
|
올려짐: 2015년12월15일 1:58 주제: |
|
|
나머지 2개도 잘 나오네요~
다른 코드도 몇 개 첨부해봅니다.
코드: |
let rec f = fn x =>
(f (malloc x); f (write "1"); x)
in
((f 1) = (f f 1), f f "1")
end
|
Result : (bool, string)
코드: |
let rec f = fn x =>
(x = x; malloc x; write x; x)
in
let val x = malloc 1 in f x end
end
|
Result : type error |
|
위로 |
|
|
최재승
가입: 2012년 9월 10일 올린 글: 211
|
올려짐: 2015년12월15일 10:44 주제: |
|
|
참고로, 김형모 님이 올려주신 첫번째 테스트케이스는 수업 자료에 나온 타입 추론 알고리즘으로는 타입체킹을 할 수 없는 예제입니다. 채점시에는 이런 케이스는 사용되지 않습니다.
코드: | let rec f = fn x =>
(f (malloc x); f (write "1"); x)
in
((f 1) = (f f 1), f f "1")
end |
그렇다고 김형모 님의 타입 체커가 틀린 것은 아닙니다. 안정성(soundness)을 유지하면서 더 완전(complete)해졌다면 더 좋은 타입 체커를 만드신 것입니다.
조교 드림 |
|
위로 |
|
|
|