게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

[질문] 주어진 sort.m의 simple type check

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2007)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
김진산



가입: 2006년 9월 13일
올린 글: 45

올리기올려짐: 2007년11월18일 20:37    주제: [질문] 주어진 sort.m의 simple type check 인용과 함께 답변

주어진 sort.m 예제에는 아래와 같은 코드가 있습니다.

코드:

  val print2 = fn x =>             
    let val a = x.1
        val b = x.2
    in
        write a; write b
    end


write의 argument는 int, bool, string 이 될 수 있기에

a와 x.1의 type inference에 실패하게 됩니다.

결국 sort.m은 제가 구현한 simple type system에서는 reject 당하게 됩니다.


polymorphic type system을 도입하기 전에는 불가능해 보이는데,

제가 잘 못 이해하고 있는건지 모르겠습니다. Embarassed


이번에 제출하는 type system이 주어진 sort.m 예제를 accept 해야 하는 것인가요?


(뿐만 아니라 현재 제 type system에서는, 함수의 argument가 오직 write 함수의

인자로만 쓰인 경우에는 추론 불가로 reject 합니다만!

이러한 동작도 정상 동작으로 받아들여질 만한 것인지 궁금합니다.)
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문 MSN 메신저
정영범



가입: 2005년 9월 5일
올린 글: 167

올리기올려짐: 2007년11월20일 17:49    주제: 인용과 함께 답변

결론부터 말씀드리면 받아들일 수 있어야 합니다.

write는 M의 정의에 나와있는 대로 int, bool 혹은 string를 받아서 그 타입 그대로 돌려주는 구문입니다. 이 조건을 만족시키는 지만 체크하면 되기 때문에 문제 없습니다. 문제에 나와 있는 print2 함수 같은 경우는 사용되는 곳을 보면 인자의 타입이 int tuple인 것을 알 수 있습니다. 따라서, (int * int ) -> int 타입이라고 유추가 됩니다. 이렇게 타입이 고정되도 사용되는 곳에서는 항상 이 타입으로만 쓰이기 때문에 문제가 없습니다.

문제가 되는 경우는 다음과 같습니다.
예를 들어 같은 예제 프로그램에서

val write2 = fn x=> write x

를 정의하고, write가 나타나는 곳을 모두 write2로 대치한다면 문제가 발생합니다.
write2의 인자의 타입을 어느 primitive type 하나로 고정할 수 없기 때문입니다(쓰이는 곳에 따라 변하므로).
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
김진산



가입: 2006년 9월 13일
올린 글: 45

올리기올려짐: 2007년11월20일 18:13    주제: 인용과 함께 답변

그렇군요!


type inference를 function body 마다 따로 하고 있었는데~

program 전체로 equation을 만들면 unify 문제가 풀리겠다~ 라고 생각만 하고

주말 이후 다른 숙제 때문에 손을 못대고 있었는데~

역시~ program 전체를 scan해야 하는 것이군요. Embarassed


저와 같은 실수를 하신 분이 많지는 않으실 것 같지만~ Crying or Very sad

참고가 되었으면 합니다.


답변해주신 조교님께 감사드립니다.
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문 MSN 메신저
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2007) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay