リストの書き換え

list -> head:
list -> tail:
のメソッドで、リストの head と tail を書き換えることが出来るように……って思ってたけど、
コレは事実上 setcar と setcdr と等しいから、破壊的操作になってる。


う〜ん、破壊を認めると循環リストみたいなのが作れる代わりに、循環を考慮しなくちゃならないからなぁ。
あと、内部的に head と tail が public に書き換え可能な変数になっちゃうのも考えもんだし。


じっくり考えよう。

追記

良く考えたら、list::head も list::tail も書き換え可能だから、

> (foo: '(a b))   # (a b) を foo に代入
(a b)
> (foo head: 'c)  # foo の head を "c" に変更
c
> (foo head)
c                 # foo の head は "c" になっている
> (foo^)
(a b)             # けど表記上は head は "a" のまま

みたいに、head に入ってる値と実際の値が異なることも考えられる。
スロットの readonly は必須かも。