Swi prolog что это
SWI-Prolog
SWI-Prolog — это свободная (открытая) реализация языка программирования Prolog, часто используемая для преподавания и приложений Semantic Web. Эта реализация представляет богатый набор возможностей, библиотеки для constraint logic programming, многопоточности, юнит-тестирования, GUI, интерфейс к языку программирования Java, ODBC и т. д., поддерживает литературное программирование, содержит реализацию веб-сервера, библиотеки для SGML, RDF, RDFS, средства разработчика (включая IDE с графическими отладчиком и профилировщиком), и обширную документацию.
SWI-Prolog работает на платформах Unix, Windows, и Macintosh.
SWI-Prolog постоянно развивается, начиная с момента создания в 1987 году. Его создателем и основным разработчиком является Jan Wielemaker. Название SWI происходит от Sociaal-Wetenschappelijke Informatica («Social Science Informatics»), первоначального названия группы в Амстердамском университете, где работает Wielemaker. Позже название этой группы сменилось на HCS (Human-Computer Studies).
Содержание
XPCE это платформо-независимый GUI тулкит для SWI-Prolog, Lisp и других интерактивных динамически типизированных языков программирования. Хотя XPCE замышлялся, как не привязанный к конкретному языку программирования, наибольшую популярность этот фреймворк получил именно с Prolog. Развитие графической библиотеки XPCE было начато в 1987, совместно с началом работ над SWI-Prolog.
Поддерживает кнопки, меню, слайдеры, вкладки и другие базовые GUI виджеты. XPCE доступен на всех платформах, поддерживаемых SWI-Prolog’ом.
PceEmacs
PceEmacs — встроенный в среду SWI-Prolog текстовый редактор. PceEmacs — это клон Emacs, написанный на Prolog (и XPCE). Он поддерживает автоматические отступы, подсветку синтаксиса, полную проверку синтаксиса путем вызова парсера SWI-Prolog, предупреждения о singleton переменных и поиск определений предикатов на основе исходного кода в Prolog-базе данных.
См. также
Ссылки
Полезное
Смотреть что такое «SWI-Prolog» в других словарях:
SWI-Prolog — is an open source implementation of the programming language Prolog, commonly used for teaching and semantic web applications.It has a rich set of features, libraries for constraint logic programming, multithreading, unit testing, GUI,interfacing … Wikipedia
SWI-Prolog — Saltar a navegación, búsqueda SWI Prolog es una implementación en código abierto (en inglés, open source) del lenguaje de programación Prolog. Su autor principal es Jan Wielemaker. En desarrollo ininterrumpido desde 1987, SWI Prolog posee un rico … Wikipedia Español
Prolog (Programmiersprache) — Prolog Paradigmen: logisch, deklarativ, oft auch constraintbasiert Erscheinungsjahr: 1972 Designer: Alain Colmerauer Entwickler: Philippe Roussell … Deutsch Wikipedia
PROLOG — Pour les articles homonymes, voir Prolog (homonymie). Prolog est l’un des principaux langages de programmation logique. Le nom Prolog est un acronyme de PROgrammation LOGique. Il a été créé par Alain Colmerauer et Philippe Roussel vers 1972. Le… … Wikipédia en Français
PROLOG — Paradigmen: logisch, deklarativ, oft auch constraintbasiert Erscheinungsjahr: 1972 Designer: Alain Colmerauer Entwickler: Philippe Roussell … Deutsch Wikipedia
SWI — can refer to: * Switzerland this is not the ISO 3166 1 code, which is CHE. * The National Rail code for Swindon railway station, which serves the town of Swindon, Wiltshire in the United Kingdom * In computing: SWI is an assembler mnemonic to… … Wikipedia
Prolog — infobox programming language paradigm = Logic programming year = 1972 designer = Alain Colmerauer implementations = BProlog, ECLiPSe, Ciao Prolog, GNU Prolog, Quintus, SICStus, Strawberry, SWI Prolog, YAP Prolog, tuProlog dialects = ISO Prolog,… … Wikipedia
Prolog — Pour les articles homonymes, voir Prolog (homonymie). Prolog Apparu en 1972 Auteur … Wikipédia en Français
Prolog — El Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique,[1] es un lenguaje de programación lógico e interpretado, bastante conocido en el medio de investigación en Inteligencia Artificial. Contenido 1 Historia 2 Vue … Wikipedia Español
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
SWI-Prolog
SWI-Prolog — это свободная реализация языка программирования Prolog. Часто используется для преподавания и приложений Semantic Web. Данная реализация содержит в себе большой набор возможностей, библиотеки для constraint logic programming, многопоточности, GUI, интерфейс к языку программирования Java и т.д. SWI-Prolog работает на платформах Unix, Windows, и Macintosh. Язык поддерживает литературное программирование. Реализация содержит библиотеки для SGML, RDF, RDFS, средства разработчика (включая IDE с графическими отладчиком и профилировщиком), и обширную документацию.
Содержание
История
SWI-Prolog постоянно развивается, начиная с момента создания в 1987 году. Его создателем и основным разработчиком является Jan Wielemaker. Название SWI происходит от Sociaal-Wetenschappelijke Informatica («Social Science Informatics»), первоначального названия группы в Амстердамском университете, где работает Wielemaker. Позже название этой группы сменилось на HCS (Human-Computer Studies).
PreEmacs
PceEmacs — встроенный в среду SWI-Prolog текстовый редактор. PceEmacs — это клон Emacs, написанный на Prolog (и XPCE). Он поддерживает автоматические отступы, подсветку синтаксиса, полную проверку синтаксиса путем вызова парсера SWI-Prolog, предупреждения о singleton переменных и поиск определений предикатов на основе исходного кода в Prolog-базе данных.
Программа на SWI-Prolog
Структура программы на Прологе отличается от структуры программы, написанной на процедурном языке. Пролог-программа является собранием правил и фактов. Решение задачи достигается интерпретацией этих правил и фактов. При этом пользователю не требуется обеспечивать детальную последовательность инструкций, чтобы указать, каким образом осуществляется управление ходом вычислений на пути к результату. Вместо этого он только определяет возможные решения задачи и обеспечивает программу фактами и правилами, которые позволяют ей отыскать требуемое решение.
Терм основная конструкция на языки SWI-Prolog. Включает:
Переменные
Свободные переменные
Переменная является свободной тогда и только тогда, когда переменная не имеет никакого значения.
Связанные переменные
Переменная является конкретизированной тогда и только тогда, когда переменная получила значение (при этом она не может быть изменена).
База знаний
Одним из элементов базы знаний является факт.
Правило
Другим элементов базы знаний, позволяющим выводить новые факты является правило.
Типы данных
SWI-Prolog поддерживает динамическую типизацию данных.
Если имя объекта начинается со строчной буквы, то этот объект имеет известное значение, то есть это константа. Объекты с известными или постоянными значениями должны начинаться со строчных букв, если они не являются числами.
Слова, начинающиеся с прописных букв, являются переменными языка SWI-Prolog.
Внутренние унификационные подпрограммы означивают переменные.
Означенные переменные и константы имеют значения, «известные» SWI-Prolog’у.
Свободные или неозначенные переменные значений не имеют.
Переменные могут быть объектами предиката как в утверждениях, так и в подцелях.
Числа
Атомы
Строки
Видно, что строки являются списками кодов символов, т.е. к ним применимы все те же операции что и к спискам.
Списки
Структуры
Интуитивно понятный пример:
Структура в прологе представляется функтором (имя структуры, то что до скобок) и параметрами (то что в скобках). Число параметров называется арностью функтора. Как видим, структуры тоже могут быть вложенными.
Унификация
Программист в соответствии с логическим синтаксисом SWI-Prolog’а объявляет, какие факты и правила дают тот или иной результат при различных подцелях, а внутренние подпрограммы унификации выполняют оставшуюся часть работы.
Внутренние унификационные подпрограммы также означивают переменные. Означенные переменные и константы имеют значения, «известные» Прологу. Свободные переменные значений не имеют.
Откат
Swi prolog что это
SWI-Prolog is a versatile implementation of the Prolog language. Although SWI-Prolog gained its popularity primarily in education, its development is mostly driven by the needs for application development. This is facilitated by a rich interface to other IT components by supporting many document types and (network) protocols as well as a comprehensive low-level interface to C that is the basis for high-level interfaces to C++, Java (bundled), C#, Python, etc (externally available). Data type extensions such as dicts and strings as well as full support for Unicode and unbounded integers simplify smooth exchange of data with other components.
SWI-Prolog aims at scalability. Its robust support for multi-threading exploits multi-core hardware efficiently and simplifies embedding in concurrent applications. Its Just In Time Indexing (JITI) provides transparent and efficient support for predicates with millions of clauses.
SWI-Prolog unifies many extensions of the core language that have been developed in the Prolog community such as tabling, constraints, global variables, destructive assignment, delimited continuations and interactors.
SWI-Prolog offers a variety of development tools, most of which may be combined at will. The native system provides an editor written in Prolog that is a close clone of Emacs. It provides semantic highlighting based on real time analysis of the code by the Prolog system itself. Complementary tools include a graphical debugger, profiler and cross-referencer. Alternatively, there is a mode for GNU-Emacs and, Eclipse plugin called PDT and a VSC plugin, each of which may be combined with the native graphical tools. Finally, a computational notebook and web based IDE is provided by SWISH. SWISH is a versatile tool that can be configured and extended to suit many different scenarios.
SWI-Prolog provides an add-on distribution and installation mechanism called packs. A pack is a directory with minimal organizational conventions and a control file that describes the origin, version, dependencies and automatic upgrade support. Packs can be installed from an archive, GIT repository or URL using pack_install/1. Packs are used to share code in the community. The pack system has grown a couple of eco systems for dealing with types, coroutining, etc.
Server applications
SWI-Prolog is equipped with an extensive web server (HTTP) framework that can be used both for providing (REST) services and end-user applications based on HTML5+CSS+JavaScript. Pengines (Prolog engines) allow clients to run queries against a client-provided program on a remote server using a generic API. Such programs can be executed in a sandbox.
For (web) server support SWI-Prolog provides scalable multi threading. We measured an 80 times speedup running on a 128 core power pc system. This feature makes SWI-Prolog attractive for CPU intensive server tasks where multiple clients require access to a large shared and possibly dynamic dataset. Note that many other high-level languages such as Python and Node.js only use a single core and switch between tasks based on blocking I/O. This approach generally provides good resource usage for I/O intensive services with a high number of connections but a task blocking on a computation delays all other clients. As SWI-Prolog’s global garbage collectors for atoms and removed dynamic clauses run fully asynchronous in a dedicated thread, its (soft) real time behaviour is excellent.
SWI-Prolog has several unique features that reduce the need to restart servers for fixing bugs or injecting diagnostic code. Its incremental compilation combined with generally local and backtrackable data structures (undo) allows for patching the program without restarting. SWI-Prolog allows for reloading running code from another thread safely, provided the signature of the running predicates is not changed. This implies it is allowed to add, remove and modify clauses but it is not allowed to add, remove or reorder arguments. Still, this feature is valuable for hot-fixing servers or inject diagnostic code to a server without restarting.
Prolog as unifying language
Although Prolog is widely recognised as a special purpose language for tasks such as rule evaluation we consider it primarily a platform that is suitable to be used as glue between various components. The main reason for this is that data is at the core of many modern applications while there is a large variety in which data is structured and stored. Classical query languages such as SQL, SPARQL, XPATH, etc. can each deal with one such format only, while Prolog can provide a concise and natural query language for each of these formats that can either be executed directly or be compiled into dedicated query language expressions. Prolog’s relational paradigm fits well with tabular data (RDBMS), while optimized support for recursive code fits well with tree and graph shaped data (RDF).
Feature list
Below is a list of what we consider key features of SWI-Prolog with links to the relevant documentation.
Как работать в SWI Prolog
Если у вас возникают проблемы с пониманием того, как вообще выполняются программ на Prolog — посмотрите статью: Введение в логическое программирование.
В этой статье описан процесс установки SWI Prolog и запуска простой программы в консоли (терминале) с помощью утилицы swipl. Однако, для SWI Prolog есть несколько сред разработки.
Установка SWI Prolog
Я буду устанавливать SWI Prolog на 64х разрядную версию OpenSUSE 42.1. Для установки открываем центр управления Yast:
Выбираем «Управление программным обеспечением». В появившемся окне вводим swipl, в правой части окна появляется соответствующий пакет, нажимаем на него правой кнопкой мыши и выбираем «установить»:
Теперь для работы в среде SWI Prolog можно открыть терминал и ввести команду swipl. Будет запущен интерпретатор, в который можно передавать команды:
Программирование в SWI Prolog
В отличии от Visual Prolog, SWI Prolog не выводит сразу все найденные решения. Выводится первое решение, при этом если полученных данных пользователю достаточно, он может ввести точку, а если ему нужны другие решения — то нужно ввести точку с запятой.
Введем в текстовом редакторе программу в соответствии с заданием:
Для обновления данных в интерпретаторе нужно повторно выполнить команду consult.
Разберем предложенную программу:
Аналогично выполняется проверка получения стипендии студентом Федоровым (которому стипендия не положена, поэтому выводится false ):
Чтобы получить имена всех студентов, получающих стипендию передадим в качестве аргумента функции stipendiya анонимную переменную:
Чтобы проверить может ли Попов трудоустроиться в Microsoft нужно использовать предикат isAbleToWork :
Чтобы получить имена студентов, способных устроиться в Apple, нужно наоборот передать в isAbleToWork имя компании, а вместо имени студента указать переменную без присвоенного заранее значения:
Аналогичный запрос, но с именем компании IBM нужно выполнить для поиска студентов, которые могут трудоустроиться в эту компанию. Результаты отличаются тем, что устроиться может несколько студентов. Для получения всех студентов нужно вводить точку с запятой после каждого результата:
Выводы: во время выполнения работы были получены навыки работы в среде SWI-Prolog Исследован код программы, выданный преподавателем; во время выполнения заданий получены некоторые навыки отладки программ в интерпретаторе SWI-Prolog.
SWI-Prolog
SWI-Prolog — это мощная среда разработки с набором графических инструментов ХРСЕ. Ядро системы лицензировано под GNU LGPL, библиотеки — под GNU GPL с дополнительным условием, позволяющим использование в проприетарных приложениях. Развитие SWI-Prolog началось в 1987 г., и сегодня он широко используется в исследовательских и образовательных целях, а также в коммерческих приложениях.
SWI Prolog — довольно популярная система, в основном благодаря удобной среде и переносимой библиотеке для создания графического интерфейса. SWI-Prolog, как почти все реализации языка, по большей части реализует Edinburgh Prolog, но также содержит отдельные элементы ISO Prolog.
SWI-Prolog включает в себя быстрый компилятор, профилировщик, набор библиотек и удобный интерфейс для подключения C-модулей. Он реализован для ряда UNIX-платформ, таких, как HP, IBM Linux, для NeXT, OS/2, Sun и Sparc.
Prolog XREF
Логотип SWI-Prolog
Ссылки:
Примеры:
Hello, World!:
Этот пример не требует загрузки фактов или правил. Запрос выполняется в интерактивном режиме, и его результат выглядит следующим образом:
Следует отметить, что замена одинарных кавычек на двойные выводит строку как массив ASCII-кодов отдельных символов:
Квадратное уравнение:
Факториал:
Как в GNU Prolog, так и в B-Prolog 12! не помещается в целочисленный тип данных, поэтому все значения после 11! неправильны. В SWI-Prolog переполнения не возникает.
Результат для GNU Prolog: compiling /home/nickolas/Desktop/progopedia/prolog/fact.pl for byte code…
/home/nickolas/Desktop/progopedia/prolog/fact.pl compiled, 3 lines read — 1372 bytes written, 5 ms
Результат для B-Prolog: consulting::fact.pl
Числа Фибоначчи:
Пример почти идентичен примеру для Poplog Prolog, за исключением синтаксиса подключения файла.