이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
홍선기
가입: 2014년 9월 29일 올린 글: 11
|
올려짐: 2015년11월9일 22:48 주제: 5-1. For문 질문입니다 |
|
|
let i := 3 in
for i := 2 to 1 do (
i := i - 1
);
write i
위 코드를 k-- 인터프리터로 돌린 결과 3이 출력되었습니다.
let i := 3 in
for k:= 1 to 2 do (
i := i - 1
);
write i
포문에서 처음 보는 변수를 쓰더래도 3이 출력되었습니다.
.
let i := 3 in
for k:= 1 to 2 do (
write k
);
write i
하지만 포문안에서 처음보는 변수에 접근하려고 하면 오류가 났습니다.
k-- 인터프리터가 어떻게 구현되었는지 자세히는 모르지만 아마 포문 변수에 아무거나
주어져도 무시하고 새로운 변수를 할당해서 독자적으로 쓰는 것 같습니다.
하지만 직관적으로 생각할때에는 당연히 포문에 주어진 "k"라는 변수명은 기존에 선언된 변수와 어떤 상호작용 (예를 들면 대입)을 하여야할 것 같습니다
(C같은 언어처럼
int i=3;
for (i=2; 0; );
printf("%d",i); -> 2가 출력됨
그래서 질문은 sm5를 구현할때 포문에서 초기문에 들어온 변수가 어떤 변수던지 간에 무시하고 새로운 이름의 변수하나를 할당하는 식으로 구현하여도 괜찮을까요? |
|
위로 |
|
|
최재승
가입: 2012년 9월 10일 올린 글: 211
|
올려짐: 2015년11월10일 1:07 주제: |
|
|
코드: | let i := 3 in
for k:= 1 to 2 do (
i := i - 1
);
write i |
인용: | 포문에서 처음 보는 변수를 쓰더래도 3이 출력되었습니다. |
해당 코드를 뼈대코드에서 직접 k-- 실행기로 실행해 봤는데, Unbound 에러가 발생합니다. K-- 문서의 스펙이나 K--실행기 코드를 봐도 그렇게 되는 것이 맞고요. 어딘가 착오가 있으셨던게 아닌지 다시 확인해 주시기 바랍니다.
인용: |
sm5를 구현할때 포문에서 초기문에 들어온 변수가 어떤 변수던지 간에 무시하고 새로운 이름의 변수하나를 할당하는 식으로 구현하여도 괜찮을까요?
|
어떤 식으로 구현해도 된다 안된다를 결정하는 원칙은 없습니다. 유일한 조건은, 주어진 K-- 프로그램과 번역한 SM5 프로그램은 같은 일을(같은 입/출력 행동을) 해야 한다는 것 뿐입니다. 이 조건만 만족하는 범위 내에서 어떤 식으로든ㄷ 구현해도 좋습니다. |
|
위로 |
|
|
|