##CLtL2はいま手元にないス
#aa,
#ああ、undefinedって明記してありますね。CLtL2のrplacaの項 (p.423) に
#(setq g '(a b c))
(rplaca (cdr g) 'd) => (d c)
Now g => (a d c)
#っていう例が上がってるんですが、HyperSpecの方が正式だろうからCLtL2のは見過ごしかな。
#でもこの動作に依存したコードって書いてた気が... 偶然動いてたのか。こわい(>_<)
#Schemeはわりとそのへんうるさい感じがします。Gaucheはコンスに関しては厳密にチェックしてないですが。
#ACLだと (setf (aref "abc" 0) #\Z) なんかも通るんだなあ。
#Gaucheでは (set! (~ "abc" 0) #\Z) はエラー。
##CLHS自身もか! 歴史的に昔は普通だったのでみんなあんまり考えてないのかも。
#あ、昔は普通(にリテラルを変更してた)、っていうのは私の想像だけれども。
#これは...
#まあ、immutableかどうかのチェックを常にやるのはオーバヘッドがあるからCLでは嫌われるかも。バッチコンパイルした場合はread-onlyなページに載せちゃえばSEGVで捕まえられるんでノーコストだけど、それはそれで「REPLでは動いてたのにコンパイルしたらSEGVった」っていういやなパターンになりそうだ。