回答編集履歴

2

二回目のPythonのコードが最初の一緒だった件

2017/11/23 10:27

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -72,9 +72,9 @@
72
72
 
73
73
  ```Python
74
74
 
75
+ y = x * 9
76
+
75
77
  x = 6
76
-
77
- y = x * 9
78
78
 
79
79
  print(y)
80
80
 

1

誤字とか一杯修正

2017/11/23 10:27

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -20,11 +20,11 @@
20
20
 
21
21
 
22
22
 
23
- `*`は掛け算を表すとします。`y = 9x`や`y = x・9`や`y = x × 9`や`Y IS X MULTIPLIED BY NINE`などの表現もありますが、表記だけの問題ですので、気にしないことにします。さて、この数式導かれる`y`は`54`です。[究極の疑問の答え](https://ja.wikipedia.org/wiki/%E7%94%9F%E5%91%BD%E3%80%81%E5%AE%87%E5%AE%99%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6%E4%B8%87%E7%89%A9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E7%A9%B6%E6%A5%B5%E3%81%AE%E7%96%91%E5%95%8F%E3%81%AE%E7%AD%94%E3%81%88)は`42`なのですが、そこも気にしてはなりません。
23
+ `*`は掛け算を表すとします。`y = 9x`や`y = x・9`や`y = x × 9`や`Y IS X MULTIPLIED BY NINE`などの表現もありますが、表記だけの問題ですので、気にしないことにします。さて、この数式によって導かれる`y`は`54`です。[究極の疑問の答え](https://ja.wikipedia.org/wiki/%E7%94%9F%E5%91%BD%E3%80%81%E5%AE%87%E5%AE%99%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6%E4%B8%87%E7%89%A9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E7%A9%B6%E6%A5%B5%E3%81%AE%E7%96%91%E5%95%8F%E3%81%AE%E7%AD%94%E3%81%88)は`42`なのですが、そこも気にしてはなりません。
24
24
 
25
25
 
26
26
 
27
- この数式をプログラミングで表現し、計算結果を得ることにしましょう。言語はPythonを使用してみます。(Pythonは3を使用しています)
27
+ この数式をプログラミングで表現し、計算結果を得ることにしましょう。言語はPythonを使用してみます。(Pythonは3を使用します)
28
28
 
29
29
 
30
30
 
@@ -108,7 +108,7 @@
108
108
 
109
109
 
110
110
 
111
- 別の見方をすると、常に成立する命題というのは**定義**と言い換えることができます。`x`を`6`と定義する、`y`を`x * 9`と定義する、という感じです。定義ですので、`y`が何か定めてから、あとから`x`を定めても問題ありません。どちらの定義が最初に来ようが、同じく結果が変わることはありません。
111
+ 別の見方をすると、常に成立する命題というのは**定義**と言い換えることができます。`x`を`6`と定義する、`y`を`x * 9`と定義する、という感じです。定義ですので、`y`が何か定めてから、から`x`を定めても問題ありません。どちらの定義が最初に来ようが、同じく結果が変わることはありません。
112
112
 
113
113
 
114
114
 
@@ -124,11 +124,11 @@
124
124
 
125
125
 
126
126
 
127
- 「割り当て」という言葉を使いましたが、これは「代入」と同じく"assignment"の日本語訳としての表現です。これは命令ですので、一つ一つが順番に処理されます。初めの1.で`x`に`6`が割り当てられました。これは、`x`が何か調べる(評価する)と`6`が出てくるようになったと言うことです。次の、2.で、まず`x * 9`が評価されます。評価とは何か説明するととても長くなるのですが、`x * 9`の評価とは「`x`を評価して、その結果に`9`を掛けること」とだけ説明してきます。最初の割り当てで、`x`は評価すると`6`になるようになっていたのでした。ですので、`6`に`9`を掛けて`54`がその結果になり、`y`に割り当てることになります。最後の3.は、さきほど`y`を評価して、結果の`54`を印字するとなります。
127
+ 「割り当て」という言葉を使いましたが、これは「代入」と同じく"assignment"の日本語訳としての表現です。これは命令ですので、一つ一つが順番に処理されます。初めの1.で`x`に`6`が割り当てられました。これは、`x`が何か調べる(評価する)と`6`が出てくるようになったと言うことです。次の、2.で、まず`x * 9`が評価されます。評価とは何か説明するととても長くなるのですが、`x * 9`の評価とは「`x`を評価して、その結果に`9`を掛けること」とだけ説明してきます。最初の割り当てで、`x`は評価すると`6`になるようになっていたのでした。ですので、`6`に`9`を掛けて`54`がその結果になり、`y`に割り当てることになります。最後の3.は、さきほど`y`を評価して、結果の`54`を印字するとなります。
128
128
 
129
129
 
130
130
 
131
- さて、この動作ですが、1.と2.が逆であったらどうでしょうか?2.の命令を実行する時「`x`を評価する」という動作がありました。まだ1.が実行されていない場合、`x`には何も割り当てられていません。ましてや、将来ないんが割り当てられるのかもわかりません。命令は一つ一つこなしていく必要があり、保留にすると言うこともできません。つまり、「`x`を評価する」ということが1.が実行される前に行うことはできず、プログラミングの処理ができないため、エラーになってしまったのです。
131
+ さて、この動作ですが、1.と2.が逆であったらどうでしょうか? 2.の命令を実行する時「`x`を評価する」という動作がありました。まだ1.が実行されていない場合、`x`には何も割り当てられていません。ましてや、将来が割り当てられるのかもわかりません。命令は一つ一つこなしていく必要があり、保留にすると言うこともできません。つまり、「`x`を評価する」ということが1.が実行される前に行うことはできず、プログラミングの処理ができないため、エラーになってしまったのです。
132
132
 
133
133
 
134
134
 
@@ -140,7 +140,7 @@
140
140
 
141
141
 
142
142
 
143
- 実はここまでの話は全てのプログラミング言語にまるわけではありません。C、C++、Java、C#、VB.NET、Perl、Python、PHP、Ruby、JavaScrit、Lua等の**命令型プログラミング言語**と言われるものに対してのみ言えることです。それに対して**関数型プログラミング言語**(Prolog等)や**論理型プログラミング言語**(Haskell、Erlang、Elixir等)等の**宣言型プログラミング言語**というものがあります。
143
+ 実はここまでの話は全てのプログラミング言語にまるではありません。C、C++、Java、C#、VB.NET、Perl、Python、PHP、Ruby、JavaScrit、Lua等の**命令型プログラミング言語**と言われるものに対してのみ言えることです。それに対して**関数型プログラミング言語**(Haskell、Erlang、Elixir等)や**論理型プログラミング言語**(Prolog等)等の**宣言型プログラミング言語**というものがあります。
144
144
 
145
145
 
146
146
 
@@ -168,7 +168,7 @@
168
168
 
169
169
 
170
170
 
171
- `x = 6`の方が後なのに問題なく処理できました。これは、Haskellにとって、`x = 6`や`y = x * 9`が**定義**だからです。数学の数式は定義としても考えられると述べましたね。そう、Haskellにおいては**数学と同じように考えることができる**と言えます。ただ、実際の処理を行うCPUは命令しか動きません。どういう処理になるのかというと、thunk遅延評価、必要呼びといった概念を説明しないと難しいので割愛しますが、命令型プログラミングよりも数学に近い考え方でプログラミングできると言えます。
171
+ `x = 6`の方が後なのに問題なく処理できました。これは、Haskellにとって、`x = 6`や`y = x * 9`が**定義**だからです。数学の数式は定義としても考えられると述べましたね。そう、Haskellにおいては**数学と同じように考えることができる**と言えます。ただ、実際の処理を行うCPUは命令しか動くことはできません。どういう処理になるのか、thunk遅延評価、必要呼びといった概念を説明しないと難しいので割愛しますが、命令型プログラミングよりも数学に近い考え方でプログラミングできると言えます。
172
172
 
173
173
 
174
174
 
@@ -196,4 +196,4 @@
196
196
 
197
197
 
198
198
 
199
- `x`や`y`を何らかの数値の変数として考えるのではなく、何らかの関数として考えるという物です。数式をプログラミングのコードにすると考えた場合、こちらのほうが正しいのかも知れません。
199
+ `x`や`y`を何らかの数値の変数として考えるのではなく、何らかの関数として考えるという物です。数式をプログラミングのコードにすると考えた場合、こちらのほうが正しいと言えるのかも知れません。