よく見るクロージャのサンプルをSchemeで書いてみた。初期値を取って、呼ばれるたびにインクリメントした値を返す関数を返す関数。こういうの見るとOOPっているの?ってならないか。
(define counter (lambda (n) (lambda () (set! n (+ n 1)) n))) (define disp (lambda (s) (display s) (newline))) (let ((c (counter 0))) (disp (c));;=> 1 (disp (c));;=> 2 (disp (c));;=> 3 (disp (c));;=> 4 (disp (c)));;=> 5 (let ((c2 (counter 10))) (disp (c2));;=> 11 (disp (c2));;=> 12 (disp (c2));;=> 13 (disp (c2)));;=> 14 |
0 件のコメント:
コメントを投稿