ごとけんです # なぜ数がmutableなのかを知りたいだけで、数をmutableにしてよ # と主張してるわけではないです。念のため。 In message "[ruby-list:19337] Re: オブジェクトの代入について" on 99/12/09, Yukihiro Matsumoto <matz / netlab.co.jp> writes: >Rubyと同様なモデルを採用している言語といえば Lisp や >Smalltalk がありますが、これらの言語では数は値がオブジェクト >です。もし、数が容器であったとするとこれらの言語のモデルと結 >構違ったものになりそうでヤなんですけど。というより、どういう >体系になるのか想像できません。 mutableな数を持って来たときにまず思い付くのは、succ! として の ++ の可能性ですね :-) さらに各演算子に対応する破壊的な操 作が思い付きます。いまのRubyには immutable なオブジェクトは 数しかないので、数が mutable になると、+= などが []= と同様 に代入を伴わない操作にできる可能性が出ます。おそらく大きな影 響はこの周辺のことでしょう。問題はそうすると + から += を自 動的に作るのがほとんど不可能になってしまうことでしょうね。 ただ、これら += などの今の解釈は、Cに由来してるのであって、 SmalltalkやLispに由来してるのではないですね、多分。 >ついでにいうと、immutableな数オブジェクトを採用すると、 >Fixnumの即値というのも、Pythonのような数オブジェクトの使い回 >しも使えないわけで、そうなると最適化手段の乏しいインタプリタ >には痛い制約だったかも知れませんね。 この辺の事情はわかるので mutable な数をあえて要求しないです。 >と今の動作と一致します。むしろ、連結の*、繰り返しの ** の方 >が演算子の意味との解離が大きくて説明に苦労しそうです。 いやいや、すでに指摘されてるように本来 a**3 は a*a*a に由来 します。むしろ問題は*を「×」(times)と読むか省略可能な「・」 (dot)と読むかですね。「×」には直積や外積などもっと特別な意 味が与えられた対象があることは指摘しておきます。逆に*を「×」 と見るのは数くらいじゃないかなぁ。また数学において日本語では 一般の(文字列も含まれる)代数の演算「・」を乗法とか積とかいい ますが、英語ではproductといってmultiplyとはいわないです。 >数における演算子の性質(可換・非可換)を保存するために、本来の >意味とは違う演算子を割り当てるのでは本末転倒です。 ちなみに演算子の性質は任意の集合上で議論されている話題です :-) 数には非可換な演算ないですね(−と÷は省略記法なので)。 # 数学が構造に関する学問であって、数に関する学問ではないこと # は世間にはあんまり理解されてないのやも知れない… >|Ruby のユーザはこれからどんどん増えていくので、今日までに Ruby を使いはじめた >|ユーザの数は、将来的にごく少ない割合になってしまうと考えれば、文法の変更に対する >|心理的障壁も低くなるのではないでしょうか? > >こっちの発言には魅力を感じました。そーかあ、気軽に文法変更し >ても良いのか(それは絶対に違う)。 ぼくも意表をつかれました。素敵な視点ですね ^^;; -- gotoken