ひわだです。遅まきながらですが。

>>> "gotoken" == GOTO Kentaro writes:
gotoken> >  [1]_q0 みたいな書き方ができると同値類っぽく
gotoken> 
gotoken> なる! []_abc とか {}_foo とか ()_xyz などの
gotoken> 文法は嬉しいかも知れませんね。
gotoken> 1.3alpha が始まってからお願いしてみようかな。

'_' を演算子に見立ててしまえば良いのかも。

class Array
  alias times_orig *
  def *(x)
    if x.kind_of?(Integer)
      times_orig(x)
    else
      a, b = x.coerce(self); a * b
    end
  end
end
class Eq
  class ReversedOp
    def initialize(v); @v=v end
    def *(x); p [@v,x] end
  end
  def initialize(v); @v=v end
  def coerce(x); [ReversedOp.new(x), self] end
end

eq = Eq.new("hoge");
p [1]*eq

Arrayの演算子はcoerceを呼んでくれないのでカッコ悪いですが、本質的なの
はclass Eqの方だけです。'_'のかわりに'*'で代用してます。coerceの呼び方
がこれであってるのかどうかはちょっと怪しいですが。

あとは、'_'を演算子にして貰えば… ^^;。僕は'@'も演算子だとうれしいけど
これはさすがに… ^^;;。smlとかだと確か任意の記号列が…(って扇るな^^;)

あと、Equivな話ではないですが、Array, Hash, Range(, String, Regexp)な
どの文法が対応しているクラスの(中置)演算子は標準でcoerceを呼んでくれる
とうれしいかも知れません。
--
檜田 和浩 ( hiwada / kuee.kyoto-u.ac.jp )