ごとけんです

# なぜ数が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