Допустим, у меня есть следующий замыкание в схеме, что увеличивает счетчик каждый раз это называется:Схема - переменная доступа к закрытию
(define count
(let ((next 0))
(lambda()
(set! next (+ next 1))
next)))
Мой вопрос просто, как я могу переписать эту функцию, так что я могу получить доступ к значению next
без увеличения счетчика? Я пробовал играть с лямбдами, но я просто не могу понять это.
Edit: некоторые контекст:
(define (dispatch m)
(let ((count 0))
(cond ((eq? m 'withdraw) withdraw) ; Increments count
((eq? m 'deposit) deposit) ; Increments count
((eq? m 'balance) balance-return)
((eq? m 'transaction) count) ; "count" on this line should return the value
(else (error "Unknown request -- MAKE-ACCOUNT"
m)))))
Не могли бы вы привести пример кода, который использует значение 'next'? –
Добавлено на главный вопрос. – nbduckman
В примере, который вы указали, внутренний 'count' всегда будет возвращен (0 в этом случае), поскольку вы привязываете его с let. Вы должны изменить определение 'count' внутри функции' dispatch'. Я полагаю, что это то, что вы сделаете, но я не уверен –