江尻です。
いろいろとGaucheにお世話になっています。 これからKahuaとかにも手を出していこうかなと思っています。
MLに出さないようなネタがあればこっちに
最近,特定の文字列やシンボル,数値ごとにメソッドを定義できるたらいいなと思ってます。 あまり良い例だと思わないのですが(^^;
gosh> (define-method div (a (b := 0)) 'hoge) gosh> (define-method div (a b) (/ a b)) gosh> (div 4 0) hoge gosh> (div 4 2) 2 gosh> (define-method hoge ((num :>= 0)) 'positive) gosh> (define-method hoge ((num :< 0)) 'negative) gosh> (hoge 0) 'positive gosh> (hoge 3) 'positive gosh> (hoge -1) 'negative
適当に書いたので汚いパッチですが上記のように動くはずです。 パッチ
調べてみたらここで議論されてたっぽい。Shiroさんが考えているEQLスペシャライザ相当の機能ってどんな感じなんだろ? 早く使ってみたいな〜
Shiro(2006/04/03 11:35:36 PDT): なるほど、eql specializerみたいに等価性だけ でなくて、条件を指定できるようにするわけですね。 応用によってはおもしろいことが出来そうですが、コアに取り込むには難があります。
gosh> (define-method hoge ((a :<= 0)) 'negative) gosh> (define-method hoge ((a := 0)) 'zero) gosh> (define-method hoge ((a :>= 0)) 'positive) gosh> (hoge 0) 'zero
私としては、「デフォルトにするには重いけれど、<generic>をサブクラスして こういう機能をつけ足すライブラリとしてならあっても良いかな」と思います。 そうするなら、specializers配列にclassしか入れられないって制限は取っておいた 方がいいかなあ。eql specializerはそのspecializer専用のクラスをon the fly で作成することを考えていたんですが、このパッチみたいにしてもいいかも。