이 문제는 z1과 z2 리스트의 car의 car을 wow로 바꿨을 때

상자와 화살표 그림(box-and-pointer diagrams)을 그려 설명하는 문제입니다.

 

c7

먼저 결과를 살펴보면 책에서 말한 것과 동일한 결과가 나오는 것을 알 수 있습니다.

z1은 두 곳 모두 wow로 바뀌었고, z2는 정한 곳만 바뀌었습니다.

 

여기에 맞춰 상자와 화살표 그림을 그렸습니다.

09

z1은 이처럼 a에서 wow로 바뀌었기에 (cadr z1)도 wow가 나옵니다.

 

10

하지만 z2는 (car (car z2))가 a에서 wow로 지정하는 곳을 바꾸었기에

(cadr z2)는 여전히 a가 나오는 것입니다.

 

 

이처럼 함께 쓰기(sharing)에서는 많은 문제가 일어나겠습니다.

아직 여기에 대해서 배운 적은 없지만,

TCP/IP 소켓 프로그래밍을 잠시 접하면서

멀티쓰레드에 대해서 공부를 하였습니다.

그 때 공유 메모리냐 메시지 전달이냐 하면서 잠시 맛만 보았는데,

이번에 조금 더 배우지 않을까 기대됩니다.^^

 

하지만 이번 주 SICP 공부는 여기까지 할 듯싶습니다.

저녁에 다른 일을 해야하고 주중에는 SICP를 볼 시간이 없을테니까요.

(어쩌면 레포트 때문에 주말에도 못 보는 일이 발생할지도...)

좀 더 부지런해서 많은 것을 했어야 하는데 그러지 못한 것이 아쉬운 하루입니다.ㅜㅜ

 

 

참조

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

 

 

(define x (list 'a 'b))
(define z1 (cons x x))
(define z2 (cons (list 'a 'b) (list 'a 'b)))

(define (set-to-wow! x)
  (set-car! (car x) 'wow)
  x)

z1
(set-to-wow! z1)
z2
(set-to-wow! z2)

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

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

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

댓글을 달아 주세요

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