| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
이준희
가입: 2006년 9월 18일 올린 글: 43
|
올려짐: 2006년10월25일 15:56 주제: SM5에서 unbind에 대한 질문입니다. |
|
|
CALLV를 번역하려면 LETF에서 bind시킨 프로시져를 얻어와서 스택에 넣어주어야 하는데요,
환경에 bind된 것을 얻어오는 방법이 unbind시킨 후 unbox하는 방법밖에 없는 것 같습니다.
이렇게 하면, unbind된 프로시져를 다시 불러오는 일은 불가능해지지 않나요? unbind하면서
환경에 바인딩된 정보가 사라지기 때문에 K--에서 시퀀스로 다른 명령을 추가로 수행하거나 할때
같은 함수를 여러 번 호출하거나, 또는 recursion을 이용할 수가 없게 될것 같은데요...
변수의 값을 읽어오거나 할때도 같은 방법을 써서 로케이션을 얻어와야 할것 같은데 이 경우도
마찬가지 문제가 발생할 것 같아서 고개가 갸웃해집니다.
제가 잘못 이해하고 있는 것인지, 판단이 서질 않네요.  _________________ ... |
|
| 위로 |
|
 |
이준희
가입: 2006년 9월 18일 올린 글: 43
|
올려짐: 2006년10월25일 16:15 주제: |
|
|
아, 착각한것 같네요. unbind하지 않고도 얻어올 수 있었군요. OTL
........unbox운운한건 더 심한 삽질이고...-_-; _________________ ... |
|
| 위로 |
|
 |
송수현
가입: 2006년 9월 4일 올린 글: 25
|
올려짐: 2006년10월25일 17:23 주제: |
|
|
그런데 LETF의 과정을 살펴보면
push (x, C') 와 bind로 이루어져야 할 듯 합니다만,
push (x, C')를 하면 (x, C', E)가 스택에 들어간다
(여기서 E는 당연히 함수의 bind는 되어 있지 않다)
이를 bind로 지금의 E에 추가한다.
즉, 지금의 E에 bind되어있는 함수의 E에는 그 자신은 포함되어 있지 않다
라는 것이 되어서..
추후 call을 하게 되면 일단은 함수를 불러 올 수 있습니다만, 그 뒤에 현재의 환경 E(함수 bind 포함)가 함수의 E(함수 bind 없음)로 바꿔치기가 된 뒤 함수의 명령들인 C' 를 실행하게 됩니다. 그렇다면 recursion의 경우 C'안에 또 자신을 call하게 되는데, 현재 환경 E에는 자신이 bind되어 있지 않으므로 문제가 발생하게 됩니다.
하여, recursion이 안 될 것이라고 생각합니다..
이게 맞다면 SM5의 차원에서 무언가 더 필요할 듯 한데요, 다른분들의 의견은 어떠신지? |
|
| 위로 |
|
 |
이준
가입: 2006년 9월 7일 올린 글: 30
|
올려짐: 2006년10월27일 3:44 주제: |
|
|
송수현님 말씀대로인것 같습니다.
애초에 sm5가 정의된것을 보면 E'에는 procedure가 bind되지 않고 있습니다.
제 생각에도 그동안 배워온 function call과 다른것 같네요.
강의록에 recursive call을 하기에 문제가 있는 방식이라고 적혀있는 방식대로
구현이 되어있다고 생각됩니다. 역시나 sm5를 바꿔야하지 않을까 싶은데요...;; |
|
| 위로 |
|
 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2006년10월27일 16:06 주제: |
|
|
원론적으로 특정 언어로 짜여진 프로그램을 동일한 일을 하는 다른 언어로 바꾸는 것은 가능합니다.
문제는, 복잡도의 문제이겠지요.
이번 SM5문제에서도, K-로 짜여진 프로그램을 SM5언어로 바꾸는 것 역시 가능합니다.
단지, 얼핏 보기에 K-와 SM5가 일대일 대응이 되지 않기때문에, 어려워 보이는 것 뿐입니다.
질문하신 일련의 사항들을 잘 해결하시는 것이 숙제의 의도입니다.
변환 과정은 여러분들의 실력이라면 충분히 가능하니, 잘 고민해서 해결하시길 바랍니다. |
|
| 위로 |
|
 |
|