신해수 손님
|
올려짐: 2007년12월3일 23:13 주제: 지난 챌린지인 tail recursion에 대해 질문 |
|
|
오늘 수업시간에 교수님께서..
(l::v::(x,C',E')::S,M,E,callx::C, K) => (S, M, E', C'::C, K)
로 해야한다고 하셨습니다. C에 수행해야할 명령이 있을 수 있기때문이죠.
C에 남아있을 수 있는 명령의 예로 let문으로 인한 unbind x를 드셨습니다.
그리고 SM5에서 unbind는 E에서 (x,w)를 제거합니다.
그런데 위 경우에 unbind되는 x는 E에 존재하는 변수입니다.
아마도 E'에는 unbind하려는 x가 존재하지 않을 것이고요.
그렇다면 오히려 엉뚱한 것이나 없는 변수를 unbind하는 상황이 오지 않을까요?
제가 unbind에 대해서 고려하지 않은 이유는.. C에 unbind x만 남아있다면,
어차피 해당 x가 들어있는 E는 C 수행후에 K의 (c,e)를 pop하면서 e로 E를 대체하여
E는 사라지기 떄문에 굳이 실행할 필요가 없다고 생각했기 때문입니다.
제가 잘못 생각하고 있는게 있을까요? 그리고 unbind 외에
tail recursion후 남아있는 C로는 어떤 것이 있을 수 있을까요?
감사합니다. |
|