SICPの演習3.8は、次のように説明されています。
セクション1.1.3で評価モデルを定義したとき、式を評価する最初のステップはその部分式を評価することであると述べました。ただし、部分式を評価する順序(たとえば、左から右または右から左)を指定したことはありません。割り当てを導入するとき、プロシージャへの引数が評価される順序は、結果に違いをもたらす可能性があります。+への引数が左から右に評価される場合は評価(+(f 0)(f 1))が0を返し、引数が右から左に評価される場合は1を返すように、単純なプロシージャfを定義します。
f
そして、最初に電話をかけた場合、もう一度電話をかける(f x)
と必ず戻るように手順を書きました。しかし、なぜそれが機能するのか正確にはわかりません。私が書いた手順は次のとおりです。x
f
(define f
(let ((s -1))
(lambda (x)
(if (= s -1)
(begin (set! s x)
s)
s))))