최재승
가입: 2012년 9월 10일 올린 글: 211
|
올려짐: 2015년12월14일 21:52 주제: |
|
|
안녕하세요.
기본적으로, 수업 자료에 나와 있는 타입 추론 알고리즘 (offline 알고리즘, M, W 등) 을 기준으로 생각하시면 됩니다. 기본적으로 타입체커는 안전(sound)해야 하며, 이 알고리즘들만큼 완전(complete)해야 합니다.
코드: | let val x = 2 in
let val x = 3 in
x
end
end |
입력으로 들어올 수 있고, 정수 타입으로 체킹되어야 합니다.
코드: | let val f = fn x => x in
let val y = fn x => x in
(f 1) + (y "x")
end
end |
입력으로 들어올 수 있고, 정수에 문자열을 더하므로 타입 에러입니다. (y "x") 대신 (y 3) 이면 정수 타입으로 타입체킹 되어야 합니다.
코드: | let val x = 2 in
y
end
|
Unbound variable이 사용되는 프로그램입니다. 이러한 프로그램을 잡아내는 것이 타입 체커의 핵심은 아니기 때문에 테스트케이스로 드리지는 않았습니다.
하지만 M이나 W 알고리즘 등을 충실히 구현했다면, 타입 추론 과정에서 unbound variable이 사용됨을 미리 파악할 수 있습니다.
따라서 이러한 프로그램도 입력으로 들어올 수 있는 것으로 하겠으며, 이 때도 TypeError 예외를 발생시키는 것으로 하겠습니다.
(Unbound variable을 위한 별도의 예외를 스펙으로 제공해 드렸으면 좋았겠지만, 듀가 얼마 남지 않았으므로 스펙은 바꾸지 않겠습니다. 그냥 TypeError 예외를 발생시켜 주시기 바랍니다.)
조교 드림 |
|