 |
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
이상규
가입: 2026년 3월 4일 올린 글: 14 위치: 대한민국 서울
|
올려짐: 2026년6월5일 23:31 주제: [숙제 8] let-다형 타입 시스템이 받아들일 식의 범위 |
|
|
안녕하세요,
let-다형 타입 시스템에서 로 일반화하는 값의 범위에 관해 질문 드립니다
숙제 pdf에는 어떤 식에서 일반화해야 하는지가 나와있지 않고,
강의 자료 https://ropas.snu.ac.kr/~kwang/4190.310/26/5-1poly-type.pdf에는 아래와 같이 일부만 나와 있습니다
| 코드: | expansive(n) = false
expansive(x) = false
expansive(fn x => e) = false
expansive(e1 e2) = true
expansive(let x = e1 in e2 end) = expansive(e1) or expansive(e2)
|
expansive(malloc e) = true를 해야 하는 것은 명확하나, 아래와 같은 경우
| 코드: | if e1 then e2 else e3
e op e
read
write e
e := e
!e
e; e
(e, e)
e.1
e.2
|
에는 이를 함수 호출로 보아 일반화를 제한해야 할지, let x = e1 in e2 end 처럼 문법 요소로 보아 부분 식이 expansive한지 판단해야 할지가 애매합니다.
특히 write e나 e = e를 expansive하지 않다고 보면 수업시간에 소개된 let-다형 타입이 아니라 임기응변 다형(ad-hoc polymorphic) 타입을 만들어야 하는데, 문제에서 임기응변 다형 타입을 구현하기를 요구하는 것인가요?
아니면 M의 실행 의미에서 안전하고 과제 문서에 나온 4가지 코드 예제를 받아들이기만 한다면 expansive를 어떤 형태로 만드는지는 자유롭게 정해도 되는 것일까요?
(6/6 수정) test18.m 예제를 보니 e = e에 대해 다형 타입을 허용해야 하는 것으로 보입니다. _________________ 감사합니다.
이상규 올림 |
|
| 위로 |
|
 |
안중원 Site Admin
가입: 2023년 3월 13일 올린 글: 97
|
올려짐: 2026년6월6일 11:07 주제: |
|
|
안녕하세요, 프로그래밍 언어 조교 안중원입니다.
expansive의 판단은 주어진 식이 메모리를 할당할 가능성이 있냐 없냐의 여부를 기준으로 구현하시면 됩니다.
말씀하신 식들은 각 자식 식의 expansive 여부를 조합하여 부모 식의 expansive 여부를 판단할 수 있습니다.
또, 말씀하신대로 숙제 8에서 요구하는 타입 시스템은 대체로 let-다형 타입을 따르지만 e=e와 write e로 인하여 임기응변 다형 타입 시스템의 성질도 갖게 됩니다.
이 점에 유의하시어 안전한 타입 검사기를 구현해주세요.
감사합니다. _________________ TA 안중원
e-mail: jwahn@ropas.snu.ac.kr |
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|