石橋秀仁です。 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/>