이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
정민재 손님
|
올려짐: 2005년10월5일 6:19 주제: 숙제 2-2 에서 질문입니다. |
|
|
과제를 하다보니 타입체크하는 함수하고 인터프리터 함수하고 별도로 구현 되었는데 이렇게 해도 괜찮을까요..
돌렷 실행시 타입체크함수에 프로그램하고 타입용빈환경을 넣어 타입을 체크한후 에러가 없으면 인터프리터 함수를 실행하도록 되어있습니다.
지금보니 이렇게 할 필요가 별로 없었던 것 같긴 한데, 어쩌다 보니 이렇게 되었네요 ㅡ_ㅡ;; |
|
위로 |
|
 |
김덕환
가입: 2005년 8월 29일 올린 글: 190
|
올려짐: 2005년10월5일 12:36 주제: Re: 숙제 2-2 에서 질문입니다. |
|
|
정민재 씀: | 과제를 하다보니 타입체크하는 함수하고 인터프리터 함수하고 별도로 구현 되었는데 이렇게 해도 괜찮을까요..
돌렷 실행시 타입체크함수에 프로그램하고 타입용빈환경을 넣어 타입을 체크한후 에러가 없으면 인터프리터 함수를 실행하도록 되어있습니다.
|
정확히 어떻게 구현하셨는지 모르겠습니다만 곤란하지 않을까 싶습니다. 요약적으로 타입을 검사하신다면(즉, 정적 타입 시스템을 구현하셨다면), 의미 정의에 따르면 돌아가야하는 프로그램 중에 타입 검사를 통과하지 못하는 프로그램이 있을 겁니다. 그렇지 않고 실제 실행의 흐름을 다 따라가면서 타입을 검사하신다면, 무한루프가 있는 프로그램의 경우에는 타입 검사 단계에서 실제 실행 단계로 못 넘어갈 듯합니다. 순수한 값만 계산하는 경우라면 실제 실행도 끝나지 않으니까 타입 검사 단계가 끝나지 않아도 된다고 볼 수도 있겠지만, K-에는 외부 입출력 같은 사이드 이펙트가 있기 때문에 그렇게 보기는 어렵겠습니다.
좀더 질문이 있으시면 구현을 봐야 제대로 답할 수 있을 듯하므로 연구실로 찾아오시는 게 좋겠습니다. _________________ TheyAreAsSmartAsYouAre |
|
위로 |
|
 |
정민재 손님
|
올려짐: 2005년10월5일 16:32 주제: Re: 숙제 2-2 에서 질문입니다. |
|
|
김덕환 씀: | 요약적으로 타입을 검사하신다면(즉, 정적 타입 시스템을 구현하셨다면), 의미 정의에 따르면 돌아가야하는 프로그램 중에 타입 검사를 통과하지 못하는 프로그램이 있을 겁니다. |
요약적으로 타입을 검사한다는 것이 정확히 어떤 뜻인지는 모르겠지만, 프로그램을 구성하는 각 exp가 정확히 하나의 리턴 타입을 갖고, 각 exp 내부에서 허용되는 exp 의 타입이 이미 결정되어 있다고 한다면 exp의 타입을 리턴하는 체크함수를 통해 실행하지 않고도 그 프로그램의 타입검사가 가능할 것이라는 생각에서였습니다. 이번 K- 에서 의미 정의에 따르면 돌아가야하는 프로그램 중에 타입 검사를 통과하지 못하는 프로그램이 어떤 것이 있을 수 있는지 모르겠습니다.
개념적인 이해가 부족해서 좀 엉뚱한 질문을 하는 것 같기도 하네요.
연구실로 찾아뵙고 질문드리지 못해 죄송합니다. |
|
위로 |
|
 |
김덕환
가입: 2005년 8월 29일 올린 글: 190
|
올려짐: 2005년10월5일 19:08 주제: Re: 숙제 2-2 에서 질문입니다. |
|
|
정민재 씀: |
요약적으로 타입을 검사한다는 것이 정확히 어떤 뜻인지는 모르겠지만, 프로그램을 구성하는 각 exp가 정확히 하나의 리턴 타입을 갖고, 각 exp 내부에서 허용되는 exp 의 타입이 이미 결정되어 있다고 한다면 exp의 타입을 리턴하는 체크함수를 통해 실행하지 않고도 그 프로그램의 타입검사가 가능할 것이라는 생각에서였습니다. 이번 K- 에서 의미 정의에 따르면 돌아가야하는 프로그램 중에 타입 검사를 통과하지 못하는 프로그램이 어떤 것이 있을 수 있는지 모르겠습니다.
|
돌아가야하는 프로그램 중에 타입 검사를 통과하지 못하는 프로그램은 민재 님의 타입 시스템 설계를 봐야지만 정확하게 알 수 있습니다. 아래는 추측성 답안입니다.
일단 민재 님 타입 시스템이 임의의 프로그램에 대해 항상 끝나는지요?
끝난다면 다음과 같은 코드는 타입 시스템에 대해 어떻게 동작하는지요?
코드: |
let x := 0 in
(read x ; if x = 0 then x:= 0 else x:= true ; x + 1)
|
현실적인 예는 아닙니다만, 표준 입력으로 0을 입력하면 우리의 정의에 따라 의미가 정의될 수 있으므로 프로그램이 실행되어야 합니다.
@ 문법이 정확하지 않을 수 있습니다만 의미는 충분히 전달되었을 거라고 봅니다. _________________ TheyAreAsSmartAsYouAre |
|
위로 |
|
 |
|