Lisp Scheme Part39
■ このスレッドは過去ログ倉庫に格納されています
0298デフォルトの名無しさん
2014/11/14(金) 00:00:58.17ID:O6F2cfMEと言いたいところだけど、まあクロージャ、環境モデルなどの語句でググれば大体わかる
そのコードで肝なのはletで包んだlambdaである点ね
lambdaってのは外側の環境を含んだ関数を返すの
この環境というのは大雑把にいえば、レキシカルスコープ上でどんな変数が参照できてどういう束縛なのかの情報みたいなものね
だから(make-counter)を評価したらletで作られた環境付きの関数が返ってくる
(define make-counter2 (lambda () (let ((count 0)) (set! count (+ count 1)) count)))として
(define counter1 (make-counter))
(define counter2 (make-counter2))
としてcounter1とcounter2の挙動を比較してみたり、二つの環境モデルを実際に図で書いてみたりすると理解できる、かも
■ このスレッドは過去ログ倉庫に格納されています