이 문제는 환경 계산법(The Environment Model of Evaluation)에 따라

안쪽 정의(Internal Definitions)가 있는 프로시저를 확인하는 문제입니다.

 

05

(그림을 클릭하시면 본 크기의 그림을 볼 수 있습니다.)

 

(define acc (make-account 50))을 실행시킵니다.

먼저 make-account 프로시저 정의를 그린 후 acc를 생성합니다.

안에는 세 개의 프로시저를 가지고 있기에 이 역시 표시합니다.

 

06

acc 안의 프로시저를 지워 그림을 간소화하였습니다.

 

다음으로 ((acc 'deposit) 40)을 실행시킵니다.

먼저 acc는 deposit이라는 인자를 받습니다.

그리고 이것은 환경 E1을 가리킵니다.

그렇게 해서 나온 결과값 즉, deposit 프로시저는 40을 인자로 받습니다.

따라서 이에 맞춰 그림을 그렸습니다.

 

07

그 후 실행을 시키면 balance 변수에 40을 더합니다.

 

 

08

다음으로 ((acc 'withdraw) 60)을 실행시킵니다.

이는 위의 방법과 동일하지만 인자만 다를 뿐입니다.

 

09

그렇게하여 balance를 30으로 바꿉니다.

 

10

마지막으로 acc2를 새롭게 만듭니다.

acc2는 acc에서 인자만 다릅니다.

따라서 그대로 복사하여 인자값만 바꿨습니다.

 

하지만 궁금한 점이 있습니다.

SICP 주석 15(322쪽)을 보면 한 코드를 진짜 함께 쓰는지,

아니면 따로 복사판을 들고 있는지는 만들기에 따라 달라질 수 있다고 적혀있습니다.

하지만 여기서 어떻게 되는지 잘 모르겠습니다.

 

다만 둘의 환경이 다르기에 거기에 맞춰 전체를 복사하였습니다.

그래서 저처럼 복잡한 그림이 나온 것입니다.

 

 

참조

해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 326

크리에이티브 커먼즈 라이선스
Creative Commons License

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/1437

댓글을 달아 주세요

[로그인][오픈아이디란?]