Kazu Yamamoto ( 山本和彦 )
kazu****@iij*****
2005年 7月 26日 (火) 13:52:42 JST
> "セルを無駄遣いする" の意味が良く判ってません。 話を簡単にするために、append の引数を 2 つに限定します。 append は第一引数の*コピー*を作成し、それを第二引数にくっつけます。 (setq a '(0 1)) (setq b '(2 3)) (setq c (append a b)) a => (0 1) b => (2 3) c => (0 1 2 3) そのため、上記のように a の値は保存されます。また、コピーの分だけ、セル を無駄遣いします。 コピーを作らない関数に nconc があります。 (setq a '(0 1)) (setq b '(2 3)) (setq c (nconc a b)) a => (0 1 2 3) b => (2 3) c => (0 1 2 3) コピーをとらないので、a の値が変わっていることが分かります。 基本的に、append は無駄が多いのでお勧めではなく(使うと素人っぽい)、 nconc は副作用があるのでお勧めではありません。 可能な限り cons を利用すべきです。 #詳しくは、拙著「リスと遊び」でも立ち読みして下さい。 --かず