江尻です。
いろいろと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 で作成することを考えていたんですが、このパッチみたいにしてもいいかも。