Система логического программирования на встроенном SWI‑Prolog
Файлы и ресурсы
Системные файлы DLL
libswipl.dll | библиотека ядра | The Prolog kernel |
pthreadGC2.dll | библиотека потоков выполнения | POSIX thread runtime library (32-bits) |
libgmp-10.dll | библиотека арифметики повышенной точности | The GNU Multiple Precision Arithmetic Library |
Файлы DLL для расширения системы (плагины)
memfile.dll | библиотека временных файлов в памяти | Memory files |
readutil.dll | библиотека утилиты быстрого чтения | Reading lines, streams and files |
Ресурсные архивы
gd_pl_state.dat | файл сохраненного состояния | Generating Runtime Applications |
Для разработчиков
gd_pl.pl | генерация файла сохраненного состояния |
gd_pl_state | папка с файлами для сохраненного состояния, не входящими в стандартную поставку SWI-Prolog |
PL-классы
Под термином PL-класс понимается класс, предназначенный на для взаимодействия со встроенным SWI‑Prolog.
How To Run Prolog Program in SWI Prolog | How To Run Prolog Program in Windows | How To Install SWI
Соответственно, экземпляр PL-класса будет называться PL‑объект.
TgsPLClient
Класс клиента SWI-Prolog. Иерархия TObject Методы Initialise(AParams: String): Boolean
Инициализация SWI-Prolog. IsInitialised: Boolean
Проверка инициализации SWI-Prolog. Call(APredicateName: String; AParams: TgsPLTermv): Boolean
Краткая форма для OpenQuery, NextSolution, Cut объекта TgsPLQuery, порождающая одно решение. Call2(AGoal: String): Boolean
Выполнение терма (аналог предиката once/1). Cleanup: Boolean
Очистка SWI-Prolog (деинициализация). Compound(AGoal: Unsigned short; AFunctor: String; ATermv: TgsPLTermv)
Компоновка терма из функтора (имени терма) и аргументов (вектора термов). LoadScript(AScriptID: Integer): Boolean
Загрузка Пролог-скрипта по идентификатору. LoadScriptByName(AScriptName: String): Boolean
Загрузка Пролог-скрипта по имени. ExtractData(ADataSet: TClientDataSet; APredicateName: String; ATermv: TgsPLTermv)
Извлечение данных Пролог-запроса в клиентский набор данных. MakePredicatesOfSQLSelect(ASQL: String; ATr: TIBTransaction; APredicateName: String; AFileName: String; AnAppend: Boolean): Integer
Формирование Пролог-фактов на основе SQL-запроса. MakePredicatesOfDataSet(ADataSet: TDataSet; AFieldList: String; APredicateName: String; AFileName: String; AnAppend: Boolean): Integer
Формирование Пролог-фактов на основе клиентского набора данных. SavePredicatesToFile(APredicateName: String; ATermv: TgsPLTermv; AFileName: String)
Prolog 2: Установка и работа с SWI Prolog
Выгрузка данных Пролог-запроса в файл. Свойства Debug: Boolean
Режим отладки.
TgsPLQuery
Класс запроса SWI-Prolog. Иерархия TObject Методы Close
Закрытие Пролог-запроса. Cut
Отсечение следующих решений Пролог-запроса (выполнения предиката). NextSolution
Поиск следующего решения Пролог-запроса (выполнения предиката). OpenQuery
Открытие Пролог-запроса и поиск первого решения (выполнение предиката). Свойства Eof: Boolean
Признак поиска решения Пролог-запроса (выполнения предиката). PredicateName: String
Имя предиката (функтор). Termv: TgsPLTermv
Аргументы предиката (вектор термов).
TgsPLTermv
Класс вектора термов SWI‑Prolog. Иерархия TObject Методы PutAtom(Idx: Unsigned short; AValue: String)
Передача по ссылке в терм данных типа Atom. PutDate(Idx: Unsigned short; AValue: Date)
Передача по ссылке в терм данных типа Date. PutDateTime(Idx: Unsigned short; AValue: Date)
Передача по ссылке в терм данных типа DateTime. PutFloat(Idx: Unsigned short; AValue: Real)
Передача по ссылке в терм данных типа Float. PutInt64(Idx: Unsigned short; AValue: Int64)
Передача по ссылке в терм данных типа Int64. PutInteger(Idx: Unsigned short; AValue: Integer)
Передача по ссылке в терм данных типа Integer. PutString(Idx: Unsigned short; AValue: String)
Передача по ссылке в терм данных типа String. PutVariable(Idx: Unsigned short)
Передача по ссылке в терм данных типа Variable (сброс ссылки в изначальное состояние). ReadAtom(Idx: Unsigned short): String
Считывание по ссылке из терма данных типа Atom. ReadDate(Idx: Unsigned short): Date
Считывание по ссылке из терма данных типа Date. ReadDateTime(Idx: Unsigned short): Date
Считывание по ссылке из терма данных типа DateTime. ReadFloat(Idx: Unsigned short): Real
Считывание по ссылке из терма данных типа Float. ReadInt64(Idx: Unsigned short): Int64
Считывание по ссылке из терма данных типа Int64. ReadInteger(Idx: Unsigned short): Integer
Считывание по ссылке из терма данных типа Integer. ReadString(Idx: Unsigned short): String
Считывание по ссылке из терма данных типа String. Reset
Сброс вектора термов (выполнение метода PutVariable для всего вектора термов). ToString(Idx: Unsigned short): String
Считывание по ссылке терма и преобразование к строке. ToTrimQuotesString(Idx: Unsigned short): String
Считывание по ссылке терма и преобразование к строке без обрамляющих кавычек. Свойства DataType(Idx: Unsigned short): Integer
Тип данных. Size: Unsigned short
Размер вектора термов. Term(Idx: Unsigned short): Unsigned short
Ссылка на терм.
Пролог-скрипты
![]() |
Примеры использования PL-объектов
![]() |
Учебный пример. Игра крестики-нолики
![]() |
Средства разработки
SWI-Prolog Editor
![]() |
SWI-Prolog graphical tracer
![]() |
Источник: gsbelarus.com
Некоторые операции и предикаты SWI-Prolog
Программирование в SWI-Prolog возможно в разных вариантах:
· с помощью стандартной offline-среды[6] программирования (http://www.swi-prolog.org);
Рис. 1. Стандартная offline-среда программирования SWI-Prolog
· с помощью offline-среды программирования SWI-Prolog-Editor (http://lakk.bildung.hessen.de/netzwerk/faecher/informatik/swiprolog/indexe.html);
Рис. 2. Среда программирования SWI-Prolog-Editor
· с помощью стандартной online-среды[7] программирования SWI-Prolog (http://swish.swi-prolog.org);
Рис. 3. Стандартная online-среда программирования SWI-Prolog
Дальнейшая работа со SWI-Prolog рассматривается на примере online-среды.
1.4. Лабораторная работа № 1
Представление фактов и правил в Прологе
Цель работы: освоение основ программирования на языке Пролог и online-среды программирования SWI-Prolog.
Рекомендации по выполнению работы
Для перехода в режим редактирования и исполнения программ необходимо нажать на кнопку «Program» (см. рис. 3).
В левой панели осуществляется редактирование программы, содержащей факты и правила.
В правой нижней панели выполняется набор вопросов и запуск их на исполнение с помощью кнопки «Run!».
Панель вопросов |
Панель ответов |
Панель редактирования программ |
Рис. 4. Режим редактирования и исполнения программ
В правой верхней панели интерпретатор SWI-Prolog выдает ответы на вопросы. В случае если на вопрос может быть получено более одного ответа, с помощью кнопок «Next», «10», «100» и «1,000» можно вывести на панель дополнительные ответы.
Необходимый теоретический материал для создания программы изложен в подразд. 1.2–1.3.
Задание на выполнение работы
Разработать программу «Родственные связи», отвечающую следующим требованиям.
А. Программа должна содержать общие для всех заданий факты и правила:
Б. По индивидуальному заданию добавить в программу правила (от 3 до 5) для определения следующих типов родственников:
12) зять (муж дочери, сестры, золовки);
13) невестка (жена сына для его матери, жена брата);
14) свекор (отец мужа);
15) свекровь (мать мужа);
16) тесть (отец жены);
17) теща (мать жены);
18) сноха (жена сына для его отца);
19) сват (отец одного из супругов для родителей другого супруга);
20) сватья (мать одного из супругов для родителей другого супруга);
21) свояк (муж сестры жены);
22) свояченица (сестра жены);
23) свояки (лица, женатые на двух сестрах);
24) деверь (родной брат мужа для жены);
25) золовка (сестра мужа);
26) шурин (брат жены);
27) дядя (брат отца или матери по отношению к детям, племянникам, кроме того, дядей является муж тетки);
28) тетка (сестра отца или матери по отношению к детям, племянникам, кроме того, теткой является жена дяди);
29) племянник (ребенок брата или сестры);
30) внучатый племянник (внук брата или сестры);
31) внучатая племянница (внучка брата или сестры);
32) двоюродный дедушка (дядя отца или матери);
33) двоюродная бабушка (тетка отца или матери);
34) двоюродный брат – кузен (сын родного дяди или тети);
35) двоюродная сестра – кузина (дочь родного дяди или тети);
36) двоюродный дядя (двоюродный брат отца и матери);
37) двоюродная тетка (двоюродная сестра отца и матери);
38) мачеха (неродная мать ребенка);
39) отчим (неродной отец ребенка);
40) падчерица (неродная дочь по отношению к одному из супругов);
41) пасынок (неродной сын по отношению к одному из супругов);
42) сводный брат (сын неродного родителя (мачехи, отчима) по отношению к детям родного);
43) сводная сестра (дочь неродного родителя (мачехи, отчима) по отношению к детям родного);
44) стрый – стрий (дядя по отцу (брат отца)).
45) уй – вуй (дядя по матери (брат матери)).
В.При необходимости добавить в программу недостающие факты и правила, требуемые для работы правил из п. Б).
Г.Отчет должен содержать:
· вопросы с ответами, иллюстрирующие корректность работы программы;
Источник: cyberpedia.su
Лабораторная. Лаба. Лабораторная работа 1 знакомство с swiprolog. Запуск простой программы по дисциплине логическое программирование
Единственный в мире Музей Смайликов
Самая яркая достопримечательность Крыма
Скачать 325.73 Kb.
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ЛАБОРАТОРНАЯ РАБОТА №1
Цель работы: знакомство с интерпретатором SWI/PROLOG, включая использование меню, создание программных файлов, запуск и трассировку программ на SWI/PROLOG.
Работа с базой начинается с ее загрузки, c помощью предиката consult().
Используя имеющуюся базу, ввести следующие запросы и посмотреть на результаты (рис. 1-2).
%Любит ли Билл теннис?
%Кто любит теннис?
?-любит(‘Марк’,Что),любит(‘Эллен’,Что).%Что любят Марк и Эллен?
Рисунок 1 – Имеющаяся база
После запуска и ввода запроса, справа отображается результат запроса.
После чего, необходимо перевести предложения русского языка в предикатную форму, создать, сохранить и загрузить базу знаний.
Эллен любит чтение.
Марк любит компьютеры.
Джон любит бадминтон.
Эрик любит чтение.
Бадминтон — это вид спорта.
Теннис — это вид спорта.
Футбол — это вид спорта.
Бейсбол — это вид спорта
Спортсмен — это тот, кто любит какой-нибудь вид спорта (рис. 3).
Также необходимо найти ответ на запрос, кто спортсмен, из имеющейся базы, результат продемонстрирован на рисунке 4.
Рисунок 4 – Результат запроса
Также необходимо использовать функционал данного средства, и воспользоваться функцией debug, для того чтобы узнать ответ на вопрос, кто любит и теннис, и компьютеры, что показано на рисунке 5.
Рисунок 5 – Использование debug
После нахождения первого ответа выдается false, так как ответов больше не найдено.
Построить запросы на основании стихотворения Джани Родари «Чем пахнут ремесла». Запросы и результат показаны на рисунках 6-7.
Рисунок 6 – Запросы
Рисунок 7 – Результат выполнения запросов
Источник: topuch.com