| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
허기홍 손님
|
올려짐: 2007년10월4일 17:38 주제: 리턴값 질문 |
|
|
run 함수는 value 를 리턴한다고 되어있습니다.
책에 보면 어떠한 환경과 메모리 상태에서 명령을 수행하면
값이 나오고 메모리 상태가 바뀌는데요.
값은 함수의 리턴값으로 주면 되는데 메모리가 바뀌는 것은 nml로 어떻게 해야합니까?
비단 이 숙제뿐만아니라도
nml시스템에서는 어떤 함수를 실행할때 결과 값을 내는것 이외에 다른일을 하게 할순 없나요? |
|
| 위로 |
|
 |
정영범
가입: 2005년 9월 5일 올린 글: 167
|
올려짐: 2007년10월5일 0:45 주제: |
|
|
예, 언뜻 보면은 말이 안되는 것 처럼 보일 수도 있겠네요.
만약 함수 run의 타입이 memory * env * program -> value가 아니라
memory * env * program -> memory * env * value라면 리턴값에 여러가지 변화를 줄 수 있겠지요?
그런데 문제는 value만 리턴하기 때문에 어려워 보일 겁니다. 하지만, 프로그램의 의미는 맨 마지막 expression의 결과 값이기 때문에 리턴 타입이 value여도 상관이 없습니다.
예를 들어,
x :=1; x +1;
같은 프로그램이 들어 오면
x가 1이라고 메모리를 변화시켜
x+1이라는 프로그램을 실행하게 함수 run을 다시 불러주면 되죠.
답변이 되었나요? |
|
| 위로 |
|
 |
김진산
가입: 2006년 9월 13일 올린 글: 45
|
올려짐: 2007년10월5일 20:35 주제: |
|
|
| 인용: |
x가 1이라고 메모리를 변화시켜
x+1이라는 프로그램을 실행하게 함수 run을 다시 불러주면 되죠.
|
"x가 1이라고 메모리를 변화시킨 상태"의 메모리를 사용할 방법이 없지 않나요?
x := 1; x+1;
같은 프로그램은
run(mem, env, x :=1); run(mem, env, x+1);
같이 실행되어야 한다고 생각하고 있습니다.
첫번째 x:=1에 의해서 변경된 메모리를 두번째 run에 넣어주어야 하는데,
현재로서는 방법이 애매합니다.
책을 보았을 때도
| 인용: |
교재 p79.
의미 정의는
env, M |- E => v,M'
을 증명하는 규칙들로 통일된다.
|
val run: memory * env * program -> value * memory
가 더 직관적으로 느껴집니다.
제가 잘 못 생각하고 있는건가요? orz |
|
| 위로 |
|
 |
오학주
가입: 2005년 9월 5일 올린 글: 118
|
올려짐: 2007년10월5일 23:48 주제: |
|
|
너무 어렵게 생각하고 계신것 같네요
run함수는 주어진 프로그램을 실행시켜서 최종적인 값을 구하는 함수입니다.
실행시킬때는 교재의 의미정의에 맞게 실행 시킨 후 최종적인 값을 리턴하면 되겠죠. |
|
| 위로 |
|
 |
|