Введение

Реализация языка программирования Prolog

SWI-Prolog – это бесплатная реализация языка программирования Prolog, широко используемая в обучении и для семантических веб-приложений. Она обладает богатым набором функций, библиотеками для логического программирования с ограничениями, многопоточностью, модульного тестирования, графическим интерфейсом, возможностью взаимодействия с Java, ODBC и другими системами, поддержкой литературного программирования, веб-сервером, SGML, RDF, RDFS, инструментами для разработчиков (включая IDE с графическим отладчиком и профилировщиком), а также обширной документацией. SWI-Prolog работает на платформах Unix, Windows, Macintosh и Linux. SWI-Prolog непрерывно разрабатывается с 1987 года. Его основным автором является Ян Вилемейкер. Название SWI происходит от Sociaal Wetenschappelijke Informatica ("Социально-научная информатика"), прежнего названия группы в Амстердамском университете, где Вилемейкер работал, когда начал разработку SWI-Prolog. Название этой группы впоследствии было изменено на HCS (Human Computer Studies).

Модель исполнения

SWI Prolog не основан на модели исполнения Warren Abstract Machine для Prolog. Вместо этого он основан на расширенной версии виртуальной машины ZIP – минимальной виртуальной машины для Prolog, реализующей простой язык, состоящий всего из семи инструкций. Специфические расширения SWI Prolog направлены на повышение производительности различными способами: вводятся ad hoc инструкции для поддержки унификации, вызова предикатов, некоторых часто используемых встроенных предикатов, арифметики, управления потоком выполнения и отрицания как отказа. Prolog может быть легко скомпилирован в этот язык, а машинный код виртуальной машины легко декомпилируется обратно в Prolog. Эта особенность часто используется для чередования выполнения скомпилированного и интерпретированного кода.

Программирование с логикой ограничений

Функциональность логического программирования с ограничениями появилась в SWI Prolog довольно поздно из-за отсутствия базовой поддержки. Это изменилось в начале 2004 года, когда в язык были добавлены атрибутивные переменные. Библиотека CHR, разработанная в Лёвене, стала первой библиотекой CLP, портированной на SWI Prolog. Мы также упоминаем библиотеку INCLP(R) от SWI Prolog (De Koninck et al. 2006), которая предоставляет нелинейные ограничения над действительными числами и была реализована на основе CHR. Позже была портирована библиотека CLP(QR) Кристиана Хольцбаура и добавлен решатель CLP(FD) для конечных областей. Наконец, был добавлен решатель для булевых CLP(B).

Расширения для SWI-Prolog

SWI Prolog устанавливается вместе с веб-фреймворком, основанным на детерминированных грамматиках предложений. Запросы SWI Prolog могут быть распределены между несколькими серверами и веб-страницами посредством системы Pengines.

XPCE

XPCE — это кроссплатформенный объектно-ориентированный инструментарий для создания графических интерфейсов для SWI Prolog, Lisp и других интерактивных языков с динамической типизацией. Хотя XPCE был разработан как языконезависимый, наибольшую популярность он получил в среде Prolog. Разработка графического инструментария XPCE началась в 1987 году одновременно с разработкой SWI Prolog. Он поддерживает кнопки, меню, ползунки, вкладки и другие базовые элементы графического интерфейса. XPCE доступен для всех платформ, поддерживаемых SWI Prolog. PceEmacs — это встроенный редактор SWI Prolog. PceEmacs представляет собой клон Emacs, реализованный на Prolog (с использованием XPCE). Он обеспечивает правильную отступы, подсветку синтаксиса, полную проверку синтаксиса с помощью парсера SWI Prolog, предупреждения об одиночных переменных и поиск определений предикатов на основе исходной информации из базы данных Prolog.

Интерфейсы

JPL — это двунаправленный интерфейс между Java и Prolog. Для его работы необходимы SWI Prolog и Java SDK. Он устанавливается вместе с SWI Prolog.