이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
박성원
가입: 2015년 9월 1일 올린 글: 19
|
올려짐: 2015년12월15일 20:50 주제: 8-1 테스트 케이스 공유 |
|
|
코드: |
let rec f = fn x =>(
f (malloc true);
if x = 0 then
x
else
x + f (x-1)
)
in
f 1
end
(* type error *)
|
신동진님이 만들어주신 케이스 입니다
김형모님의 테스트케이스를 해결하려고
재귀함수도 다형타입으로 될 수 있게 해버리면
저 케이스가 타입에러가 안나더라고요...
우리의 목표는 sound한 체커를 만드는거니까
이게 타입에러가 제대로 나오는게 먼저인게 아닐까 싶네요
늦었지만 공유해봅니다 |
|
위로 |
|
|
최재승
가입: 2012년 9월 10일 올린 글: 211
|
올려짐: 2015년12월17일 9:54 주제: |
|
|
사실 이 테스트케이스는 실제 실행시 타입 에러 없이 무한 루프에 빠지므로, 타입 체커가 통과시켜도 불안전(unsound)한 것은 아닙니다.
(물론 M/W 알고리즘은 불완전(incomplete)하므로 이 프로그램에 대해 타입 에러를 내놓습니다.)
반면 아래처럼 Sequence 순서가 바뀌면 실행시 타입 에러가 나므로 반드시 타입 체킹할때 타입 에러를 잡아내야 안전(sound)합니다.
코드: |
if x = 0 then
x
else
x + f (x-1)
f (malloc true);
|
조교 드림[/code] |
|
위로 |
|
|
|