Поиск…


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

Для эффективности код Prolog обычно скомпилирован для абстрактного машинного кода перед его запуском.

Для эффективного выполнения программ Prolog было предложено множество различных архитектур и вариантов абстрактных машин. Они включают:

  • WAM , Абстрактная машина Уоррена
  • TOAM , абстрактная машина, используемая в B-Prolog.
  • ZIP , используемый, например, в качестве основы для виртуальной машины SWI-Prolog
  • VAM , исследовательская архитектура, развитая в Вене.

индексирование

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

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

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

Оптимизация звонков

Практически все системы Prolog реализуют оптимизацию хвостовых вызовов (TCO). Это означает, что предикатные вызовы, находящиеся в позиции хвоста, могут выполняться в постоянном пространстве стека, если предикат является детерминированным.

Оптимизация хвостовой рекурсии (TRO) является частным случаем оптимизации хвостового вызова.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow