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になる