| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
이중호
가입: 2009년 9월 19일 올린 글: 35
|
올려짐: 2009년10월5일 20:54 주제: 아직 이해가 안되네요,, |
|
|
값과 메모리를 리턴한다는건 튜플을 리턴한다는거 아닌가요?
run은 값만 리턴하는데,,,
그럼 run 내부에 튜플을 리턴하는 함수를 만들어놓고 정해진 시맨틱스를 따라 계산하여 run이 최종 결과값만을 리턴하게 하는건가요?
또한 이러한 함수는 값과 메모리 뿐만 아니라 Env도 리턴해줘야 되는게 아닌지,,,
숙제가 감이 잡히질 않습니다,,,
만약 K.run( K.emptyMemory, K.emptyEnv, ASSIGN("i", 10))을 실행하면 결과값은 뭔가요 |
|
| 위로 |
|
 |
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년10월5일 22:04 주제: |
|
|
많은 분들이 헷갈려하셔서 제가 이 밑에 김우열씨 질문에 답변으로도 달아놓았습니다.
중호씨 말대로
내부에 튜플을 리턴하는 함수를 만들어놓고 최종 결과에서 값만 취하시면 됩니다.
env는 뭐 구현에 따라 다를 수 있겠지만 리턴안해도 구현할 수 있습니다.
한 번 잘 생각해보세요.
K.run( K.emptyMemory, K.emptyEnv, ASSIGN("i", 10))
이걸 실행하면 결과는 에러입니다.
왜냐면 현재 환경에는 i 라는 변수가 없는데 거기다가 10을 대입하려하기 때문입니다. |
|
| 위로 |
|
 |
노건일
가입: 2009년 9월 26일 올린 글: 50
|
올려짐: 2009년10월5일 22:53 주제: |
|
|
엇.
ASSIGN("i", 10) 하면..
if 10을 계산해서 value가 나온다면
then i에 메모리를 할당해서 그 value를 저장하는거 아니었나요?
으.. 난 그런줄 알았는데... |
|
| 위로 |
|
 |
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년10월6일 7:19 주제: |
|
|
ASSIGN은 변수를 메모리에 할당하는 것이 아닙니다.
원래 메모리에 있는 변수에다 값을 저장하는 것이죠.
새로운 변수를 할당하는 것은 LETV가 하는 일입니다. |
|
| 위로 |
|
 |
노건일
가입: 2009년 9월 26일 올린 글: 50
|
올려짐: 2009년10월6일 9:10 주제: |
|
|
아..
조교님 그렇다면 for도 역시 기존에 메모리에 있던 변수를 찾는건가요?
for x := e1 to 21 do e3
를 쓰려면 위에서
let x := 0 in 을 꼭 해줘야 하는건가요? |
|
| 위로 |
|
 |
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년10월6일 9:29 주제: |
|
|
그렇습니다. 변수나 함수 선언은 LET으로만 할 수 있습니다.
여러분. 아직 semantics 읽는 법에 익숙치 않으셔서 그런데
LEV나 CALLV 보시면 '예전 메모리에 속하지 않은 l'이 있죠?
예전 메모리에 속해있지 않다는 것은 새로 할당한 주소라는 뜻입니다.
반면 ASSIGN이나 FOR에서 쓰이는 '시그마(x)' 는 이미 시그마의 정의역에 x가 있어야 하고 그 때 함수값 '시그마(x)'를 의미합니다.
만약 정의역에 x가 없다면 (이는 곳 선언되지 않은 변수) 에러입니다. |
|
| 위로 |
|
 |
|