>>94
その本何ですか。
とりあえず、Schemeでそれをやっちゃいけないフォーマルな根拠は
R5RSのsection 3.4 "Storage model" の最後のパラグラフ。

Constant list (literal listの値)を変更してはいけない理由は、
- そういうオブジェクトはコンパイルされた時read-only memoryに
置かれる可能性がある (ハード的なROMというわけではなく、text
regionなどの変更不可なエリアも含む)。
- コンパイラは最適化によって、そういうオブジェクトをプログラムの
他のデータと共有することもある。破壊的操作をすると思わぬ箇所に
影響が出る可能性がある。

後者は最近、comp.lang.lispで「一行づつ実行すると動くのに関数に
まとめると動かない!」って誰か悩んでいたな。

(setq x (list 'a 'b 'c))
(set-cdr! (cddr x) (list 'd))
なら良い。