연습문제 3.17~19는 풀리지 않아 잠시 보류하였습니다.ㅜㅜ
이 문제는 환경 그림(environment diagram)을 그리는 문제입니다.
해당 문제가 있는 절의 제목이
'변했다는 말은 그저 덮어썼다는 뜻이다(Mutation is just assignment)'이기에
여기에 맞춰 환경 그림을 그렸습니다.
예전에 배웠던 것을 다시 기억을 되살려 그릴려니 어렵습니다.
몇 달도 되지 않았는데 이렇게 다 까먹다니...ㅜㅜ

일단 프로그램을 돌려보니 정말 17이 나옵니다.^^
이제 하나씩 해보겠습니다.

(define x (cons 1 2))
여기서는 x만 만들어집니다.
x는 parameter가 없습니다.
여기서 cons를 어떻게 환경으로 그려야할지 몰라 저처럼 car, cdr을 붙였습니다.

(define z (cons x x))
여기서는 z가 만들어집니다.
z는 x와 같이 parameter가 없습니다.
그리고 cons를 쓰고 모두 x를 가리킵니다.
따라서 환경 E2를 새롭게 만든 다음 E1을 가리키도록 하였습니다.

(set-car! (cdr z) 17)
이제 set-car!로 값을 바꾸었습니다.
cdr z의 car을 17로 바꾸라는 명령어이고 cdr z는 x이니
x의 car에 있는 값을 17로 바꾸라는 명렁어입니다.
따라서 E1에 있는 car이 1에서 17로 바뀌었습니다.
그렇기에 최종적으로 (car x)를 실행시키면 17이 나오는 것입니다.
참조
해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 339
(define x (cons 1 2))
(define z (cons x x))
(set-car! (cdr z) 17)
(car x)
- SICP Exercise 연습문제 3.23 (0)2008/07/05
- SICP Exercise 연습문제 3.22 (0)2008/07/05
- SICP Exercise 연습문제 3.21 (0)2008/07/04
- SICP Exercise 연습문제 3.20 (0)2008/07/04
- SICP Exercise 연습문제 3.16 - 수정 (0)2008/07/03
- SICP Exercise 연습문제 3.16 (6)2008/03/23
- SICP Exercise 연습문제 3.15 (0)2008/03/09
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.







댓글을 달아 주세요