Immutableオブジェクト

immutableオブジェクトの実装を行いました。以下のようなエラーの検出が可能となります(*1)

Ypsilon 0.9.6-trunk/r317 Copyright (c) 2008 Y.Fujita, LittleWing Company Limited.
> (define const (list 1 2 '(3 4 5) 6 7))
> (set-car! (caddr const) 4)

error in set-car!: attempt to modify literal constant (3 4 5)

irritants:
  ((3 4 5) 4)

backtrace:
  0  (set-car! (caddr const) 4)
  ..."/dev/stdin" line 1

これで逆引きSchemeset-car!の例に対応できました :^)

(*1) 既存のスクリプトで互換性に問題が発生する場合には--compatibleオプションまたは#!compatibleコメントで無効化できます。