SICPゼミ第52回

練習問題4.25

(define (factorial n)
  (unless (= n 1)
    (* n (factorial (- n 1)))
    1))

適用順序言語では先に unless の引数がすべて評価される、すなわち (factorial 0) の評価が先に行われてしまうため、無限ループに陥って停止しない。 正規順序言語では引数が遅延評価されるため停止する。

練習問題 4.26

派生手続きにするのは,いい感じにif文に変形してやればいい.引数の順番変えるだけだし楽.

構文として定義してしまうと,手続きではないのでmapとかと組み合わせて使いたいときに困る.