Абстрактная машина Уоррена
В 1983 году Дэвид Уоррен разработал абстрактную машину для выполнения Пролога, состоящую из архитектуры памяти и набора команд . [1] [2] [3] Эта конструкция стала известна как Абстрактная машина Уоррена (WAM) и стала де-факто Пролога стандартной целью для компиляторов .
Цель [ править ]
Целью компиляции кода Пролога в более низкоуровневый код WAM является повышение эффективности последующей интерпретации программы Пролога. Код Пролога достаточно легко преобразовать в инструкции WAM, которые можно более эффективно интерпретировать. Кроме того, последующие улучшения кода и компиляцию в машинный код часто легче выполнять на более низкоуровневом представлении.
Для написания эффективных программ на Прологе может оказаться полезным базовое понимание того, как работает WAM. Некоторые из наиболее важных концепций WAM — это индексация первого аргумента и ее связь с точками выбора, оптимизация хвостового вызова и освобождение памяти в случае сбоя.
Области памяти [ править ]
WAM имеет следующие области памяти:
- Глобальный стек или куча , используемый для хранения составных терминов.
- Локальный стек для фреймов окружения и точек выбора.
- След для записи того , какие привязки переменных следует отменить при возврате.
Пример [ править ]
Вот фрагмент кода Пролога:
girl(sally).
girl(jane).
boy(B) :- \+ girl(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)
proceed
label(4): trust_me_else_fail
label(5): get_atom(jane,0)
proceed
predicate(boy/1):
get_variable(x(1),0)
put_structure(girl/1,0)
unify_local_value(x(1))
execute((\+)/1)])
Важной характеристикой этого кода является его способность справляться с различными способами вызова предикатов: любой аргумент может быть переменной, основным термином или частично созданным термином. Инструкции переключения обрабатывают разные случаи.
Ссылки [ править ]
- ^ Дэвид Х.Д. Уоррен (октябрь 1983 г.). Абстрактный набор команд Пролога (PDF) . Менло-Парк, Калифорния, США: Центр искусственного интеллекта при SRI International . Архивировано (PDF) из оригинала 19 июня 2022 г.
- ^ Хасан Айт-Каджи (18 февраля 1999 г.). Абстрактная машина Уоррена: учебная реконструкция (PDF) . Архивировано из оригинала 13 февраля 2003 г.
{{cite book}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ Хасан Айт-Качи. «Абстрактная машина Уоррена: реконструкция учебника; книга, опечатки и слайды» . Архивировано из оригинала 19 января 2022 года . Проверено 7 марта 2011 г.