yaotti's diary

Software is Eating the World

schemeの内部状態変数


テストで出た問題。

Question

(+ (f 0) (f 1))において、引数が右から(つまり(f 1)から)評価されるときは1を、
左から評価されるときは0を返すようfを定義せよ。

Answer

(define (make-func)
  (let ((pre-val 1))
    (define (func x)
      (set! pre-val (* pre-val x))
		 pre-val)
    func))
(define f (make-func))

(f 1)
;;=> 1
(f 0)
;;=> 0
(f 1)
;;=> 0

時間内に解けなかった…だめだー。
落ち着いて考えればできるはずの問題なので悔しい。