sicp.io
5.2.1 · Состояние в именованных ячейках

Регистры как явное состояние машины

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

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

Какая информация должна присутствовать для возобновления вычисления?

  • Представление регистров в виде одного явного значения состояния
  • Отделение одиночного перехода от повторного выполнения
  • Чтение конечного состояния вместо одного лишь итогового числа

Список состояния содержит a, b и число завершенных переходов. Процедура step выполняет одно евклидово сокращение и возвращает новый список, не скрывая ни одного изменяющегося значения.

Процедура run не содержит самого арифметического правила. Она проверяет, равен ли b нулю, и в противном случае повторяет step, поэтому правило перехода и контроллер остаются разделенными.

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

    Первая программа возвращает конечное состояние регистров (2 0 4). Значение gcd равно 2, и завершились четыре перехода.

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

    Проследите за каждым применением step и наблюдайте, как прежнее значение b становится следующим значением a. Значение состояния фиксирует счетчик переходов наряду с арифметическими регистрами.

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

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

    Запустите машину со значением a, равным 30, и значением b, равным 18. Предскажите полное конечное состояние, включая число переходов.

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

    Записывайте один новый список после каждой операции вычисления остатка.

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

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