이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
조은상
가입: 2006년 9월 8일 올린 글: 17
|
올려짐: 2006년9월27일 21:51 주제: 제공된 테스트케이스에 대해 질문입니다. |
|
|
제공된 테스트케이스 중에 match.k- 를 살펴보던 중 이상한 점이 발견되었습니다.
예를 들어,
코드: | while (
let
terminateGame := 1
in (
(if (now isFirst) then (
(write 119112114)
;(read terminateGame)
))
;(not (terminateGame < 1))
)
)
do ( |
이런 부분이 있는데요.. (주석 생략)
수업시간에 배운 syntax에서는 while E do S 라고 되어 있습니다.
그러면 이 테스트케이스는 에러가 나야 정상이지요?
while S do S 이니까요.. |
|
위로 |
|
 |
김지훈
가입: 2006년 9월 12일 올린 글: 11
|
올려짐: 2006년9월28일 6:32 주제: |
|
|
in 안의 body를 보시면 마지막에 (not (terminateGame <1)) 이 리턴되고 있습니다. 이것이 bool값이기 때문에 실행 가능해야 할 듯 합니다. |
|
위로 |
|
 |
조은상
가입: 2006년 9월 8일 올린 글: 17
|
올려짐: 2006년9월28일 9:23 주제: |
|
|
LET문에서 (not (terminateGame < 1)) 은 해석되어 값을 내놓습니다. 그 값은 메모리 어딘가에 있겠지요. 그리고 LET문은 메모리를 내놓습니다.
WHILE문은 프로그램식을 받아야 하는데, 이 경우는 메모리가 들어갑니다.
수업시간에 배운 의미대로라면, LET에서 값 전달은 해당 LET 이전에 정의된 free id를 통해서 넘겨주어야 할 것 같습니다. |
|
위로 |
|
 |
장민석
가입: 2006년 9월 5일 올린 글: 165
|
올려짐: 2006년9월28일 11:46 주제: |
|
|
엄밀히 따지면 조은상님 말씀이 맞는 것 같습니다만,,
원래 let문의 취지를 생각한다면 let E in S 에서 S가 표현식이 되는 것도 허용하는 게 좋을 것 같습니다. 즉 LET(..)의 함수값이 메모리이거나 value인 것을 모두 허용하자는 것이지요.
강의노트에
(전제 생략...)
e' M' ㅏS ⇒ v
______________________
e,M ㅏ let x:=E in S ⇒ v
이런 걸 추가하자는 거죠. |
|
위로 |
|
 |
조은상
가입: 2006년 9월 8일 올린 글: 17
|
올려짐: 2006년9월28일 12:40 주제: |
|
|
네. 저도 말씀하신 대로 값을 내놓는 방법으로 추가해서 match.n- 를 실행가능하도록 만들어보기도 했습니다.
그런데 LET이 값을 내어놓는다면, 변수의 scope을 지정한다는 의도와 맞지 않는 것 같습니다. variable scoping 외에 다른 취지가 있었나요?
함수값이라고 표현하셔서 LET이 함수인가.. 하고도 생각해봤습니다. 그런데 아직 배우지 않은 부분이라 강의 노트만 읽어보기는 했지만, K- 에서는 HW3에서 도입할 procedure도 값을 내놓지는 않는 것 같습니다.
특히 앞으로 구현하게 될 HW3의 Exercise 1을 보시면, HW2와는 다르게 주석이 붙어 있는데 LETV(지금의 LET)는 variable binding, LETF는 procedure binding이라고 되어 있네요.. LET의 역할이 variable binding이라고 한정지으려는 의도로 적으신게 아닌가 합니다. |
|
위로 |
|
 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2006년9월28일 14:32 주제: |
|
|
조은상 씀: | 그런데 LET이 값을 내어놓는다면, 변수의 scope을 지정한다는 의도와 맞지 않는 것 같습니다. variable scoping 외에 다른 취지가 있었나요? |
let x=e1 in e2에서 내어놓는 값은 e2를 계산한 값입니다.
변수의 scope을 지정한다는 것은 x라는 변수의 scope을 "e2를 계산하는 동안"으로 한정하겠다는 것입니다.
따라서 e2의 계산이 끝난 후, 결과값을 let밖으로 내보내는 것과 변수의 scope을 제한하는 것과는 무관합니다. |
|
위로 |
|
 |
|