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 を使う人は限られていると言われているのが分かった気がする。