問題4.25 – SICP(計算機プログラムの構造と解釈)その198

問題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-valueexceptional-value が評価されてから unless の評価が実行されるため、(= n 1) が真の場合でも (* n (factorial (- n 1))) を評価してから unless の評価が行われる。
したがって、factorial が必ず評価されることになり再帰が終了せず、無限ループに陥る。

正規順序の言語では、引数が必要となるまで手続き引数の評価がされないため正常に終了する。

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»