ひさびさ読書会

一緒にヤッてた若い方が多忙でなくなったとの事で再開。
久々だったので以下なナニがぱっと見で理解できず。

(define new-withdraw
  (let ((balance 100))
    (lambda (amount)
      (if (>= balance amount)
          (begin (set! balance (- balance amount))
                 balance)
          "Insufficient funds"))))

define な式が評価された時点で let 以降の式も評価されるんだったか云々と。new-withdraw が評価されないと let 以降の式も評価されない。ので、評価される度に異なるオブジェクトが作られる、ってあたりがイメージできるようになるまで若干の時間を要しました。