- - PR -
1行に代入文2個 これは何?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-03-01 11:40
x=x*x 0=x*x-x 0=x(x-1) y? z? | ||||||||
|
投稿日時: 2007-03-01 12:01
んー、yとかzは乗算の一般的な話をするために持ち出しただけなので置き換えて欲しかったのですが。 x = x * xでx = 0だと0 = 0 * 0となり、逆算は0 = 0 / 0。0除算になるため逆算が成立しない、従って0 = 0 * 0も成立しないって事です。 #この話は等価式の話だと思ってたのですが、何か勘違いしてます私? -- 編集内容 -- タグの対応が変になったので修正。 -- /編集内容 -- [ メッセージ編集済み 編集者: D.Matsu 編集日時 2007-03-01 12:04 ] | ||||||||
|
投稿日時: 2007-03-01 12:18
objectです。
簡単に書きます。 >nagiseさん >// 1.右辺に左辺と同様の変数が現れる場合 >hoge = hoge +1; 確認したいのですが、これは 例えば、結果が「3」になる場合、 「3 = 3 + 1」 と仰りたいのでしょうか? 確かに、これが事実なら、nagiseさんの仰る通りだと思います。 しかし、初心者でない限り、結果が「3」になる場合は、 「3 = 2 + 1」 となっている事は当然だと考えている筈です。 つまり、代入に於いて両者は等しい訳です。 #勿論、一般的には、その代入の意味の範囲内に於いて等しい訳ですが。 ベーシックの初歩の説明で、 「変数は、対象を入れる箱」 等の説明をしていると思いますが、 それは「内容そのもの」ではなく、その「アドレス」という意味だと思います。 確かに、殆どの場合、「内容そのもの」と考えても問題はないですが、 上の例は、それが駄目な場合の代表だと思います。 私が、これ以上分かり易く説明しようとすると 恐らく数学的になるんだと思いますから、これ以上の説明はしません。 | ||||||||
|
投稿日時: 2007-03-01 13:55
数学の「=」は両辺が値が一致し、時間の概念がなく時間は一致するに等しい。 Cの「=」は両辺の値は一致するが、両辺の時間は一致せず両方に含まれる変数の値は一致するとは限らない。 Cの「==」は時間は一致するが、両辺の値は一致するとは限らない。 ..ではダメですか? 「hoge = hoge +1」 は、実行前には「2 = 2 + 1」であり実行後には「3 = 3 + 1」ですが、この表現は代入式としても数式としても意味がないと思います。 あくまで代入式「hoge = hoge +1」ではないでしょうか? | ||||||||
|
投稿日時: 2007-03-01 14:07
| ||||||||
|
投稿日時: 2007-03-01 14:14
こんにちは
なんだか変な方向に進んでまつねw Cでは = == は数学的意味は全くない単なる演算子 = は 右辺の結果を 左辺に代入し さらにその値を返す演算子 ==は 右辺と左辺を比較して その結果を返す演算子 ではダメなのか? C++だったら 色々変なことも出来るけどねw | ||||||||
|
投稿日時: 2007-03-01 14:42
どうして「数学的意味」にこだわるのかが理解できません。命令(代入)の記述に見慣れたき号である = を使っているだけだと思うのですが、それ以上の意味があるんでしょうか。
そういえば、多くの言語で代入に = を使うのは、単に使う機会が多いからパンチ量を減らすため・・というのを聞いた気がします。Pascal(Delphi)だと代入は := です(私はこちらの方が手馴れてる・・)。 | ||||||||
|
投稿日時: 2007-03-01 14:46
1.object氏
pattern1 = pattern2 = getPattern(); において 「『代入』という意味より『等しい』という意味」 「値が「getPattern()」であるという事の言明」 との持論を提示 2.nagise C言語における代入と等号は明確に区別されているので 混同すべきではないと反論 3.object氏の反論
「=」と「==」は表裏一体ということは、 代入直後に「==」で比較するとtrueとなるということ? 4.nagise 表裏一体とならないと反論。 その一例が hoge = hoge +1 5.object氏反論
演算の過程において、hogeが2の初期値を持つのであれば、 hoge + 1が 2 + 1となり、それがhogeに代入され、3となり、 object氏のいうところの表裏一体の==をもちいて 3 == 2 + 1 は真となる。 変数をその瞬間の実値に置き換えて考える以上はobject氏は正しい。 ただし、変数を変数として考える以上は hoge = hoge + 1 は表裏一体とされる==で hoge == hoge + 1 と表されなければならない。 このとき、左辺のhogeと右辺のhogeは時系列が異なっているので 正しく表現できない。 もちろん、 新しいhogeの値 == 古いhogeの値 + 1 であるが、C言語の表現としてそのようなことはできない。 さて、このように「=」で代入されているが、「==」と置き換えて真とならない 例があるが、その場合はロジックを読み解いて真となる旨を理解せよと object氏はおっしゃるわけだが、「=」と「==」は安直に表裏一体ではない ということを認めていることになる。 さて、戻って pattern1 = pattern2 = getPattern(); において 「『代入』という意味より『等しい』という意味」 という説は認められるか? 表裏一体であるのであれば、まだしも、「=」と「==」は 先の例から見て、表裏一体となるかはロジックを読み解く必要があった。 「値が『getPattern()』であるという事の言明」であるかどうかを 捕らえるためには先にロジックを読み解かなくてはならない。 それは「言明」とはいえない。 単にロジックを追いかけ意味を理解するだけのことであり、 その表記法を持って「等しさの言明」にはならない。 Q.E.D. object氏の説明は騙し絵のようです。 部分、部分では数学的正しさがあったとしても、 全体としてみたときにゆがんでいて正しく繋がっていない。 全体的な整合性をもった理論を説明されるのであれば、 数学的な説明だろうと私はどこまでもつきあいます。そういった議論は嫌いではない。 ただし、数学のフリをして正しくないことを主張するのであれば、付き合いきれない。 「分かり易く説明しようとすると恐らく数学的」? 「正しさを証明しようとすると数学的になる」ならいくらでもどうぞ。 自己矛盾がないからといって無矛盾性を証明できはしないけれども、 そもそもobject氏の論理は矛盾だらけです。 それを数学とおっしゃるのであれば、数学に対する冒涜ですよ。 |