回答編集履歴
1
誤字の修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
プログラミングの世界には**評価戦略**という概念があります。`&&`や`||`で言われている「遅延」と言う言葉は評価戦略での**遅延評価**のことを言っています。ただし、`&&`や`||`は遅延評価の中でも特殊なパターンと位置づけて、**短絡評価**と言う場合の方が多いです。
|
2
2
|
|
3
|
-
遅延評価の反対は**正格評価**です。評価戦略はこの二つの何れかにわかれます。そう、正格評価に対して、何かが遅れる(遅延
|
3
|
+
遅延評価の反対は**正格評価**です。評価戦略はこの二つの何れかにわかれます。そう、正格評価に対して、何かが遅れる(遅延する)から遅延評価と呼ばれるのです。ですので、まずは正格評価とは何かと言うことを理解する必要があります。
|
4
4
|
|
5
5
|
与えられた引数を単純に足す`plus`関数があるとして、次のような式を考えます。
|
6
6
|
```JavaScript
|
@@ -9,7 +9,7 @@
|
|
9
9
|
```
|
10
10
|
ほとんどのプログラミング言語では、0個以上の式を引数として、関数を呼び出し、一つの式になります。さて、この式について、関数を評価する前に、引数として割り当てられている各式を評価する必要はありますでしょうか?上の例では、`plus`を評価する前に`1 + 2`や`3 * 4`を評価し、その結果を求める必要があるかどうかと言うことです。普通は**ある**と答えることでしょう。何を当たり前な事を…と思ったかも知れませんが、一見、この当たり前な評価の仕方を正格評価といいます。つまり、正格評価とは、ある関数の式について、**その引数にあたる式全てを評価した後に**関数自体を評価することです。
|
11
11
|
|
12
|
-
実は、上のことは全てのプログラミング言語
|
12
|
+
実は、上のことは全てのプログラミング言語においてそうであるとは言えません。例えば、Haskellの場合、
|
13
13
|
```Haskell
|
14
14
|
plus a b = a + b
|
15
15
|
plus (1 + 2) (3 * 4)
|