Разбираю сейчас реализацию полусумматора из SICP, и что-то не могу понять вот эту реализацию компонента:
(define (inverter input output)
(define (invert-input)
(let ((new-value (logical-not (get-signal input))))
(after-delay inverter-delay
(lambda ()
(set-signal! output new-value)))))
(add-action! input invert-input)
’ok)
Это же обычная функция, вроде, не имеющая состояния. Вообще, логично было бы сделать этот объект с состоянием, ведь этот элемент присутствует на схеме. Например, провода они делают с состоянием. Где логика? Далее, зачем они определяют процедуру invert-input прямо внутри вызова inverter? Ведь она же будет заново создаваться при каждом вызове! Ее нужно было бы вынести за пределы. Я что-то не понял, то ли я не врубился, то ли авторы делают буквально детские ошибки как в проектировании, так и в реализации. Неужели такое возможно? Что за на:)
Перемещено tailgunner из development