by shigemk2

当面は技術的なことしか書かない

リスト遊び 8-2 setcar と setcdr

前回
リスト遊び 8-1 cons の特性 - by shigemk2

consが安全である理由は、必ずセルを生成することである。
CARとCDRは新たに作られるので、この2つのポインタに何を
指されても、他のデータを破壊することはない。
危険を承知で、すでに存在するセルのCARとCDRを変更する
方法があれば、セルの利用効率を向上できる。

setcar でセルのCARを、
setcdr でセルのCDRを直接変更することができる。

consが安全であるのに対し、setcar setcdrは破壊的な関数であると
言える。これは副作用があるとも言われている。

(setq zoo '(1))
(1)
(setcar zoo 2)
2
zoo
(2)
(setcdr zoo '(3))
(3)
zoo
(2 3)
(setcdr zoo 3)
3
zoo
(2 . 3)

上記の例では、後からzooを参照したら、
zooは別の値に変更されていることが分かる。

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)