이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
신재호
가입: 2018년 9월 13일 올린 글: 10
|
올려짐: 2018년12월13일 17:55 주제: 과제 7-1번 질문입니다. |
|
|
(fn x => x x) (fn x => 2)
의 경우엔 타입이 어떻게 되는지 궁금합니다!
m으로 실행해 봤을때와 제 타입체커로 실행했을땐 int가 나오는데, 왜 int가 되는지 이해하기 어려워서 질문드립니다. |
|
위로 |
|
|
배요한 Site Admin
가입: 2018년 3월 6일 올린 글: 107
|
올려짐: 2018년12월14일 8:59 주제: |
|
|
안녕하세요,
실제 실행 과정을 나열하자면 다음과 같이 됩니다.
(fn x => x x) (fn x => 2) --> ((fn x => 2) (fn x => 2) ) --> ((2))가 되기 때문에 결과 타입은 int가 됩니다.
하지만 let-polymorphic 타입 체커에서는 type-checking fail이 뜰겁니다.
let val f = fn x => (x x)
val g = fn x => 2 in
(f g)
end
위와같은 프로그램을 타입체크할때 수업 슬라이드를 참고하시면 fn x => x x 부분의 타입 타우를 먼저 유추하고
해당 타입에 맞도록 f를 Generalize시키게 됩니다. 이때 fn x => x x 는 simple type check로는 유추할 수 없는
식이기 때문에 이번 숙제의 스펙 상으로는 타입체크에 실패하는 프로그램입니다.
따라서 이러한 테스트케이스는 사용하지 않을 예정입니다.
TA 이동권
e-mail: dklee@ropas.snu.ac.kr
TA 배요한
e-mail: yhbae@ropas.snu.ac.kr |
|
위로 |
|
|
|