Абстрактная машина Уоррена

редактировать

В 1983 году, Дэвид HD Уоррен разработал абстрактную машину для выполнения Prolog, состоящую из архитектуры памяти и набора команд. Этот дизайн стал известен как Абстрактная машина Уоррена (WAM) и стал де-факто стандартной целью для компиляторов Prolog .

Содержание

  • 1 Цель
  • 2 Области памяти
  • 3 Пример
  • 4 Ссылки

Назначение

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

Для написания эффективных программ на Прологе может оказаться полезным базовое понимание того, как работает WAM. Некоторые из наиболее важных концепций WAM - это индексирование первого аргумента и его связь с точками выбора, оптимизация хвостового вызова и восстановление памяти в случае сбоя.

Области памяти

WAM имеет следующие области памяти:

  • Глобальный стек или куча, используемые для хранения составных терминов
  • Локальный стек для кадров среды и выбора -points
  • Путь для записи привязок переменных, которые следует отменить при возврате

Пример

Вот фрагмент кода Пролога:

girl (sally). девушка (джейн). мальчик (B): - \ + девочка (B).

Компилятор Пролога на основе WAM скомпилирует это в инструкции WAM, подобные приведенным ниже:

predicate (girl / 1): switch_on_term (2,1, fail, fail, fail), label (1): switch_on_atom ( [(sally, 3), (jane, 5)]) label (2): try_me_else (4) label (3): get_atom (sally, 0) continue label (4): trust_me_else_fail label (5): get_atom (jane, 0) предикат продолжения (мальчик / 1): get_variable (x (1), 0) put_structure (girl / 1,0) unify_local_value (x (1)) execute ((\ +) / 1)])

Важный Характерной чертой этого кода является его способность справляться с различными режимами, в которых могут быть вызваны предикаты: любой аргумент может быть переменной, основным термином или частично конкретизированным термином. Инструкции «переключателя» обрабатывают разные случаи.

Ссылки

Последняя правка сделана 2021-06-20 08:36:31
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте