一人読書会 「計算機プログラムの構造と解釈」 (2)
1.1.3 組合せの評価
組合せは、以下のように評価される.
- 組合せの部分式を評価
- 最左の演算子を被演算子に作用させる
これを 作用的順序の評価(applicative-order evaluation) というが、もう一つ、組合せを完全に展開してから演算を行う評価方法を、正規順序の評価(normal-order evaluation) という.
問題 1.5
作用的順序の評価を使う解釈系での振る舞い、正規順序の評価を使う解釈系での振る舞いを説明せよ
>(define (p) (p)) >(define (test x y) (if (= x 0) 0 y)) >(test 0 (p))
if がショートサーキットであるとするならば、解釈系が、作用的順序であれば、(test 0 (p)) で、最初に x = 0 が評価されて、結果が 0 となり、test の第2引数 (p) は評価されない。
正規順序の評価であれば、まず組合せが展開される段階で、test の第2引数 (p) が無限ループ(?) に陥ってしまう。
・・・ のではないか。
ちなみに、DrScheme で実行すると、結果が返ってこなかった。