SICP問題3.8
+の引数を左から右へ評価すると 0 を返し、右から左へ評価すると1を返すような手続きf
引数が0の場合、内部変数を0にする手続き
(define (make-f init) (lambda (x) (if (= x 0) (begin (set! init 0) init) init)))
左から右へ評価する場合
(define f (make-f 1)) ; f (f 0) ; 0 (f 1) ; 0
よって (+ 0 0) で、0になる
右から左へ評価する場合
(define f (make-f 1)) ; f (f 1) ; 1 (f 0) ; 0
よって (+ 1 0) で、1になる