http://www-ui.is.s.u-tokyo.ac.jp/~hara2001/scheme/material/5/5.mtd.column.html
東大の教材より、感動を覚えたプログラム。
(define (make-account balance) (define (withdraw amount) ; 引き出し (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds")) (define (deposit amount) ; 預金 (set! balance (+ balance amount)) balance) (define (dispatch m amount) (cond ((eq? m 'withdraw) (withdraw amount)) ((eq? m 'deposit) (deposit amount)) (else "Unknown request"))) dispatch) (define acc (make-account 10000))実行結果
> (acc 'withdraw 5000) 5000 > (acc 'withdraw 6000) "Insufficient funds" > (acc 'deposit 4000) 9000 > (acc 'withdraw 6000) 3000これはもう、凄いというか、ほんとに Lisp(scheme) とオブジェクト指向を知っている人しか組めねーぞ。 Lisp を使う人は限られていると言われているのが分かった気がする。