Я пытаюсь понять код схемы процедуры счетчика. Это процедура более высокого порядка (процедура выдает другую процедуру), и я застрял с ней.Почему процедура make-counter содержит два определения лямбда?
(define make-counter
(lambda (n)
(lambda()
(set! n (+ n 1))
n)))
(define ca (make-counter 0))
(ca)
(ca)
Это выдает 1 и 2 соответственно, как ожидалось. Зачем нам здесь 2 вложенных процедуры? Каковы их функции индивидуально?
Я был бы признателен, если кто-то объяснит подробности. Спасибо, теперь.
'set!' Не возвращает новое значение (по крайней мере, на Chicken. Я не уверен, работают ли другие схемы по-разному). – jkiiski
@jkiiski Вы правы, я не видел 'n' в исходном вопросе и ошибочно полагал, что' set! 'Вернул значение. Благодаря! – coredump
Спасибо! Это очень помогло. Я забыл, что объекты похожи на процедуры в схеме и теперь поняты. – ErenL