- Lisp Scheme Part39
302 :デフォルトの名無しさん[sage]:2014/11/14(金) 00:10:49.42 ID:OZzSNTvY - あ、いつもCommon Lispばっか書くから間違えてた
(define make-counter2 (lambda () (let ((count 0)) (set! count (+ count 1)) count))) で、 (make-counter) (make-counter2) の挙動を比較してみたらってことですね、ごめん
|
- Lisp Scheme Part39
305 :デフォルトの名無しさん[sage]:2014/11/14(金) 00:30:14.36 ID:OZzSNTvY - >>298の表現も間違ってるな
> (make-counter)を評価したら は > make-counterはletで作られた環境付きの関数に束縛されてる と読み替えてね >>303 まともな処理系ならクロージャ自身の束縛がなくなった時点でまとめてGCされると思う
|
- Lisp Scheme Part39
316 :デフォルトの名無しさん[sage]:2014/11/14(金) 18:44:20.31 ID:OZzSNTvY - 一例としては、メッセージパッシング
(defun counter () (let ((c 0)) (lambda (&optional message) (ecase message ((nil) (incf c)) (:reset (setf c 0)) (:get c))))) (setf (symbol-function 'f) (counter)) (f) (f :reset) (f :get)
|