Собственная ячейка памяти и стабильный интерфейс
Присваивание прячет средства измерений и ход эксперимента за стабильными интерфейсами процедур вместо сквозной передачи служебных данных.
Когда скрытое состояние упрощает взаимодействие процедур, которые в остальном независимы друг от друга?
- Инкапсуляция счетчика вызовов за одной отслеживаемой процедурой
- Разделение обычных запросов и сообщений count и reset
- Запоминание следующего результата в конечном эксперименте
- Отделение управления Монте-Карло от хранения состояния эксперимента
- Определение границы воспроизводимости явного конечного расписания
Процедура make-monitored добавляет к произвольной процедуре одно закрытое связывание calls. Обычные числовые сообщения увеличивают значение связывания и делегируют вызов обернутой процедуре. Сообщения count и reset позволяют проверять или изменять данные мониторинга, не требуя от каждого вызывающего передавать значение счетчика вместе с настоящим аргументом.
Вторая программа отделяет контроллер Монте-Карло от объекта эксперимента с состоянием. Процедура monte-carlo знает только то, что вызов experiment возвращает следующий булев результат. Переданный конечный список делает этот запуск воспроизводимым и напрямую моделирует модульное преимущество присваивания.
- Вывод
- —
- Значение
- —
- Диагностика
- —
Программа с отслеживанием возвращает (9 16 2 reset 0). Конечный эксперимент возвращает ((3 5 3/5) exhausted).
Найдите закрытое связывание calls и отличите обычное делегирование от сообщений count и reset. В эксперименте проследите за присваиванием cdr после каждого результата и убедитесь, что monte-carlo никогда не обращается к списку результатов напрямую.
Измените программу и сравните результат.
Добавьте в make-monitored сообщение last-result, затем создайте два эксперимента из одного и того же списка результатов и чередуйте их вызовы. Предскажите, какие закрытые ячейки памяти могут повлиять друг на друга.
Показать подсказку
Каждый вызов конструктора создает собственные ячейки памяти. Контроллер должен по-прежнему использовать только процедурный интерфейс experiment.