Basic Werk | Blog | Contact


MEMOMEM

Scheme_Let_Over_Lambda



let の中に閉じ込めた lambda は、let で宣言した変数の値を保持している。

つまり "Let Over Lambda" は Closure を生成する。

また、Closure を更に lambda で包むと Closure Generator を定義できる。



;; Counter (Closure) (define cnt (let ((n 0)) (lambda () (set! n (+ n 1)))))
;; Generator (define cnt-generator (lambda () (let ((n 0)) (lambda () (set! n (+ n 1))))))

gosh> (cnt) 1 gosh> (cnt) 2 gosh> (cnt) 3
gosh> (define cnt1 (cnt-generator)) cnt1 gosh> (define cnt2 (cnt-generator)) cnt2 gosh> (cnt1) 1 gosh> (cnt2) 1 gosh> (cnt1) 2 gosh> (cnt1) 3 gosh> (cnt2) 2


参考:

素数夜曲: 女王陛下のLISP

P.439~


#Scheme #Lisp #Gauche #Closure #Generator



SN 2013/07/12 23:47:36

Archives > Scheme_Let_Over_Lambda.html