я учусь для моей финальной схемы, и объекты с локальным состоянием всегда были сложной темой.
Вот вопрос из моего выпускного экзамена, по которому мне нужна помощь.
(define (make-incrementer n)
(let ((old 0)
(new 0))
(lambda ()
(cond ((< new n)
(set! old new)
(set! new (+ new 1))
old)
(else
(set! old 0)
(set! new 1)
old)))))
(define a (make-incrementer 3))
(define b (make-incrementer 3))
(define c a)
; 1) (a)
; 2) (a)
почему, когда a
вызывается во второй раз, он возвращает 1? Я смотрю на код, и n
, который мы ему даем, всегда равен 3. Так разве он не всегда подходит для случая else
?