石橋秀仁です。

At Thu, 16 Dec 1999 15:09:07 +0900
  gotoken / math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

> >数学表記に合わせたって言うよりも、ただ単に算数とかメモの慣習的表記に合わせて
> >るんではないですか?だから、慣習の違う集団でだと、違和感を感じたりもする訳
> >で。しょせん、メソッドコールの別名に過ぎないからどうでもいい、と割り切ったほ
> 
> そうかなぁ。結合順位までサポートしてるんだし、文字の入った式
> なんだし少なくとも中学校以上の数学表記を頑張ってサポートして
> ると思うんですが。まつもとさんにはそういう意図はなかったかも
> 知れないけど、多くのプログラミング言語で扱う算術式はそうだと
> 思いますので、その考えを継承しないのは結構大胆かと。

ぼくも、「メソッドコールの別名に過ぎない」と割り切るほうです。
つまり、"a.b(c)"というのは、「レシーバaに、メッセージbを、パラメタcで渡す」
という意味であって、「変数aに適した型の関数bを引数cで呼ぶ」というのでは
ないからです(というのはまともなOOのOOPLとして見た場合)。

そうであれば、"a.b"と"b.a"が可換であるというのは、OO的には不自然です。

ですから、純粋なOOを壊さなければ、満足できるほどの数学的な記述は
できないと思います。つまりはトレードオフです。どちらを取るかといえば、
ぼくはOO的な純粋さを取ります。Rubyの演算子はdef +; ...; endという
メソッドであり、同時にメッセージでもあるからです。

ここで、一つのアイデアですが、「TeXのように数式を書きたい」といった
向きのために、そういう機能を実装することは以外と簡単かも知れません。
# 以下の場合、racc。電卓と対して変わらない。

  TeXの数式のString -> 対応するRubyの式(値を返すブロック)のString

たとえば(クラスにするとかはともかく、ここでは関数として)、

a = 6; b = 4; c = 2;
texFormula = String.new("a + \\frac{b}{c}")
calcInstString = tex2inst(texFormula)  # == String.new("a+b/c")
result = eval(calcInstString)  # == 8

僕自身は必要性を感じませんが(上記の通り)、しかし便利かも。

Hideto ISHIBASHI <http://vip.cis.kurume-nct.ac.jp/%7Es34204/>