sicp.io
3.5.2 · Время как последовательность

Поэлементное раскрытие потока по запросу

Поток сохраняет первое значение сразу и откладывает вычисление, способное породить остальную часть последовательности.

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

Как конечный запуск может использовать последовательность без последнего элемента?

  • Представление потока в виде текущего значения и отложенного хвоста
  • Отслеживание вычислений по требованию при повторных вызовах stream-ref
  • Различение описания бесконечного процесса и бесконечного выполнения

Процедура integers-from может описывать бесконечную последовательность, так как cons-stream не вычисляет свой хвост немедленно. Каждый хвост представляет собой promise для следующей пары.

Процедура stream-ref принудительно вычисляет ровно столько хвостов, сколько требуется для достижения запрошенного индекса. Запрос индекса 9 строит конечный префикс и возвращает 10, поэтому данный запуск завершается.

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

    Первая программа возвращает 10 после принудительного вычисления девяти хвостов потока.

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

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

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

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

    Измените запрошенный индекс с 9 на 4. Предскажите значение и количество хвостов потока, которые потребуется принудительно вычислить.

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

    Индекс 0 использует текущий car без принудительного вычисления cdr.

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

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