抽出オペレータ ~

新しい構文 ~ を導入。これはGaucheの ~ ( http://blog.practical-scheme.net/gauche/20100428-shorter-names )を参考にしているが、nmoshにはネイティブのオブジェクトシステムが無いので一段階抽象化(nmosh miniobj)した。
Gaucheの~との違いで重要なのは、nmoshの ~ は代入まで面倒を見ないといけない点。
Cで次のように書ける操作を考える。

tbl.hoge = fuga;

Gauheでは、set!はSRFI-17としても機能するので、

(set! (~ tbl 'hoge) fuga)

のように書ける。
nmoshの抽出オペレータでは、set!は使えないので、オペレータ内に書く必要がある。

(~ tbl 'hoge := fuga)

今回は、代入操作のために := を操作子として予約した。
R6RSのvariable transformerは特定の構文オブジェクトに関連付ける必要があるため、この目的には使えない。
nmoshでは全てのOOP風操作をこの~オペレータに集約しようと考えている。例えば、メソッドの呼び出しを ! で行うと約束すれば、

(~ obj 'slot ! 'method)

は、

(apply
 (~ obj 'method)
 (~ obj 'slot))

のような構文として定義できる。