sicp.io
3.3.5 · Дискретно-событийное моделирование

Расписание событий и моделируемое время

Действия с временными метками попадают в упорядоченное расписание и обрабатываются с самого раннего момента, в каком бы порядке их ни добавили.

Вопрос для размышления

Как моделирование может определять следующее действие, не следуя порядку планирования?

  • Представление события как явных данных о времени и действии
  • Вставка событий в порядке неубывания временных меток
  • Сохранение порядка планирования для событий с одинаковым временем
  • Накопление состояния путем первоочередной обработки самого раннего события

Процедура schedule обходит уже упорядоченное расписание до тех пор, пока новое время не окажется раньше текущего события. Одинаковые временные метки не удовлетворяют строгой проверке на неравенство, поэтому новое событие для этого времени вставляется после уже находящихся там событий. Возвращаемый список отражает как моделируемое время, так и порядок разрешения совпадений.

Процедура propagate извлекает самое раннее событие, применяет его числовое изменение к сигналу signal и записывает полученное состояние рядом со временем этого события. Расписание моделирует логическое время, а не ожидает физических часов, и эти примеры не моделируют физику одновременных событий за рамками явного правила вставки.

Код SICP407 из 1,048,576 байт UTF-8
Примеры
Результат
Вывод
Значение
Диагностика
Трасса выполнения0 / 0 событий
    Запуски происходят внутри браузера с отображением результата программы и трассы выполнения.
    Ожидаемый результат

    Первая программа возвращает ((2 sense) (5 open) (5 close)). Вторая программа возвращает ((2 1) (4 4) (5 14)).

    На что обратить внимание в трассе

    Проследите за сравнениями в процедуре schedule, пока каждое событие не займет позицию по своей временной метке. Затем наблюдайте, как propagate последовательно извлекает моменты времени 2, 4 и 5, пока signal принимает значения 1, 4 и 14. Эти трассы описывают только данное расписание и его явное правило для одинаковых меток времени.

    Попробуйте сами

    Измените программу и сравните результат.

    Запланируйте событие с именем reset на момент времени 1 в первой программе. Предскажите его позицию без изменения правила вставки.

    Показать подсказку

    Новая временная метка меньше времени любого события, уже находящегося в расписании.

    Завершить этот урок

    В этой главе пройдено 0 из 21 урока0%