リストの書き換え
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 は必須かも。