問題4.25 – SICP(計算機プログラムの構造と解釈)その198
2009年06月11日
問題4.25
(define (unless condition usual-value exceptional-value) (if condition exceptional-value usual-value)) (define (factorial n) (unless (= n 1) (* n (factorial (- n 1))) 1))
作用的順序の Scheme では定義された unless
の引数である usual-value
と exceptional-value
が評価されてから unless
の評価が実行されるため、(= n 1)
が真の場合でも (* n (factorial (- n 1)))
を評価してから unless
の評価が行われる。
したがって、factorial
が必ず評価されることになり再帰が終了せず、無限ループに陥る。
正規順序の言語では、引数が必要となるまで手続き引数の評価がされないため正常に終了する。
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542