2008年1月8日火曜日

Chapter 13 Beyond Lists: Other Uses for Cons Cells

前説

データ構造を扱う関数群は、複雑なマクロを書くときに役に立つ。まあ、そりゃそうだ。


Trees

おお、a list of lists は list だけれど、それは、"a list" of lists だからなだけなんだ。
この本、読んでると、おお、と感心したことが、単に字句通りなことが多い。。。
認知障害が発生しているのかもしれないが、こうやって理解が深まっていくものと信じたい。

COPY-LISTとCOPY-TREEの違い。

CL-USER> (defparameter *a* '(1 2))
*A*
CL-USER> (defparameter *b* '(3 4))
*B*
CL-USER> (defparameter *c* '(5 6))
*C*
CL-USER> (defparameter *L* (list *a* *b* *c*))
*L*
CL-USER> *L*
((1 2) (3 4) (5 6))
CL-USER> (defparameter *LC* (copy-list *L*))
*LC*
CL-USER> *LC*
((1 2) (3 4) (5 6))
CL-USER> (defparameter *T* (copy-tree *L*))
*T*
CL-USER> *T*
((1 2) (3 4) (5 6))
CL-USER> (setf (car *a*) 10)
10
CL-USER> *L*
((10 2) (3 4) (5 6))
CL-USER> *LC*
((10 2) (3 4) (5 6))
CL-USER> *T*
((1 2) (3 4) (5 6))
CL-USER> (defparameter *b* 3)
*B*
CL-USER> *B*
3
CL-USER> *LC*
((10 2) (3 4) (5 6))
CL-USER> *T*
((1 2) (3 4) (5 6))
CL-USER> (setf *C* 'c)
C
CL-USER> *LC*
((10 2) (3 4) (5 6))
CL-USER> *T*
((1 2) (3 4) (5 6))
CL-USER> (setf (caar *L*) 100)
100
CL-USER> *LC*
((100 2) (3 4) (5 6))
CL-USER> *T*
((1 2) (3 4) (5 6))
CL-USER>

なる。


Sets
Lookup Tables: Alists and Plists
DESTRUCTURING-BIND

特になし。しかし、cons cellsを使ったデータ構造やそれらを対象とした関数の振舞を文章で説明されるのは、綾取りを文章で説明されるような感覚だ。

0 件のコメント: