日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年2月19日木曜日

演算子 (1) 「=」

比較演算子の下記4つは、二つの記号が組み合わされている。
== != >= <= 「=」に「!」や「<」、「>」の記号が加わって、二つ一組で新たな意味を生み出している。 「=」は単体ではどのような意味があるのかを明確にすれば比較演算子の理解も深まると思って 「=」を調べてみることにした。 プログラムでは「=」記号は、「代入」を意味する。 数学では両辺が「等しい」という意味をもった「記号」である。 プログラムの入門書では、「=」には数学の「等しい」という意味ではなく、代入を表す「記号」という説明がされている。 しかし、本当に「等しい」という意味は完全に失われているのだろうか?
コンピュータ工学は数学から発展してきて、しかも同じ記号をつかっているのに、
オリジナルの意味を完全に失っているとういことがありえるのか?

完全に異なる定義なのに同じ記号を使っているのは、混乱を招く。
「代入」しか意味がないのであれば「←」といった記号を使った方が混乱は少ない。
(APL(Aプログラミング言語)ではそうらしい)

同じ記号を使っている限り、その底辺にながれる意味は、オリジナルの「等しい」ではないのか?
また、同じ記号が「代入」で使われているのは、そのオリジナルの意味を失いたくないからではないのか?


まずは、wikiで「等号」をしらべてみた。

歴史から見ると
ロバート・レコードという数学者によって1557年に発明された記号と言うことになっている。

それについてもう少しくわしくのべているページがあった。
計算記号の話
ブログ コンセントの穴: 平行線

ロバートは「世の中で平行線ほど等しいものはない」と考えてこの記号を考案した。
同じ角度で同じ方向を向いている平行線。
角度が違う二つの線は進むにつれて近づいていくことはあるが交わった後は必ず離れていく。
お互いの距離はどんどん遠ざかる。
でも、平行線はその間隔を絶対に広げない。
同じ方向を向いているのだから。
世の中にこれほど等しいものはない。


これらを読んでみると、数学では「左辺と右辺が等しいことを示す」ということで使われているが、
もともと「=」記号自体は純粋に「等しい」を意味している。


プログラミングの「代入」においては注意すべき点がある。
数学における「変数」は、同一式内においては右辺にあっても左辺にあっても同じ値と考えられているが、プログラミングでは同一になるとはかぎらない。

たとえば、
a=a+1
ここで、両辺の変数「a」は同じ物を意味しているわけではないということ。

ようするに、プログラミングにおいて、この式は
b=a+1
といいかえることもできる。

「変数a」は、右辺、左辺で、独立しており関連性はない。
右辺の「a」を仮に「5」としても左辺は「5」になるとは限らない。
これは数式のルールとは異なっている。


これが原因で「数学のイコールとは違う」と説明されるのではないだろうか?

プログラミングと数学では、
右辺と左辺で使われる変数(記号)について解釈の違いがある。


ここで、簡単にまとめると、プログラミングにおける「=」は、
1)左辺と右辺の「価値が等しい」ことを意味する。
2)左辺と右辺で使われる変数記号は独立しており、同じ文字(記号)であっても値に同一性はない

b=a+1
でもう一度みてみると
左辺「b」と右辺「a+1」は「価値が等しい」ので、
左辺「b」の中身は「a+1」でなくてはならない。

結果的に「代入」が実行されたことになる。


ついでに「代入」を調べると、wikiでは、
1. 数学における代入。式や関数に含まれる文字や変数を、数や他の文字や式で置き換えること。
2. プログラミングにおいて変数とデータ値を関連づけること。変数 (プログラミング)を参照。



「代入」についていろいろと調べようとしたけど、話が哲学的になりすぎて、自分の知識と知恵ではとても処理しきれないのと、今回は「=」が主題なので今日はここまで。

メモ:
左辺値と右辺値について
数学の左辺、右辺の定義とはことなる。

「=」を使う代入式は
「(左辺)は(右辺)である。」という表現にかえることができる。
これは左辺と右辺が同一の意味を持っているということになる。


「代入」とは、ある内容を別の形態で表現すること。
記号論で言う「記号」の定義でもある。

0 件のコメント:

コメントを投稿