回答編集履歴
2
二回目のPythonのコードが最初の一緒だった件
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
誤字とか一杯修正
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`などの表現もありますが、表記だけの問題ですので、気にしないことにします。さて、この数式
|
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`が何か定めてから、
|
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`を掛けること」とだけ説明して
|
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.の命令を実行する時
|
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
|
-
実はここまでの話は全てのプログラミング言語に
|
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は命令
|
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`を何らかの数値の変数として考えるのではなく、何らかの関数として考えるという物です。数式をプログラミングのコードにすると考えた場合、こちらのほうが正しいと言えるのかも知れません。
|