Ниже приведен пример кода, загруженного для проблемы: Счетчик увеличивается на единицу, изменяя его для передачи в качестве аргумента значения, используемого для приращения. Е.Г.,У меня есть некоторые трудности в понимании Исходный код схемы
(let ((c (create-counter))) (+ (c) (c) (c) (c))) => 6
(let ((c (create-counter 2))) (+ (c) (c) (c) (c))) => 12
Исходный код:
(define create-counter
(lambda ([num '()])
(let ((temp (lambda (incr)
(let* ((start (- incr))
(count start))
(lambda num
(set! count (+ incr count)) count)))))
(if (null? num)
(temp 1)
(temp num)))))
Это мой собственный код:
(define create-counter
(let ([count 0])
(lambda ([x '()])
(cond
[(null? x) (set! count (+ 1 count)) (- count 1)]
[(> x 0)(set! count (+ x count)) (- count x)])
)))
Я понимаю, немного коротко о пусть и лямбда, как для закрытия ручки и такие. Однако для этой экстремальной проблемы я все еще не знаю, как писать, как пример кода. Мой код выполняет следующую работу:
(+ (create-counter 2) (create-counter 2) (create-counter 2) (create-counter 2)) -> 12
Однако мой код не работает с образцами образцов. Я иногда получаю 0 или ошибки.
Что мне нужно изменить, чтобы исходный код мог работать и работать как образец? Пожалуйста, помогите мне лучше понять эту сферу и закрыть все, и все советы будут очень ценными. Спасибо и извините за мой плохой английский.
Есть ли эквивалентный код для «begin0»? С lambda() я всегда могу вернуть значение функции в закрытие, которое моя функция определяет, правильно ли? – kp2349
Причина 'begin0' используется для возврата текущего значения счетчика, а затем последующего его повторения. Если вы не хотите использовать 'begin0', это будет выглядеть так: (λ() (let ((x val)) (set! Val (+ val incr)) x))' – naomik
спасибо за объяснение я подробно. Я понял проблему сейчас. – kp2349