sicp.io
3.5.1 · Отложенное вычисление

Мемоизация promise через delay и force

delay откладывает работу на будущее, а force выполняет эту работу не более одного раза и повторно использует мемоизированный результат.

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

Как два вызова force могут привести только к одному вычислению?

  • Разделение создания promise и применения force
  • Наблюдение первого вычисления при force и повторного использования мемоизированного значения
  • Использование счетчика эффектов для обнаружения скрытых вычислений

Создание later не выполняет его тело. Первый вызов force изменяет значение calls с 0 на 1 и сохраняет полученное значение в promise.

Второй вызов force возвращает сохраненное значение без повторного выполнения тела. Конечное значение calls остается равным 1, что делает мемоизацию заметной в результате.

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

    Первая программа возвращает (1 1 1).

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

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

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

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

    Выполните force для later еще три раза и добавьте calls в конец результата. Предскажите, какие значения могут измениться.

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

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

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

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