SWI-Prolog
Материал из GedeminWiki
(Различия между версиями)
Latunov (обсуждение | вклад) (→Система логического программирования на SWI-Prolog) |
Latunov (обсуждение | вклад) м (→Литература по языку Пролог) |
||
| (не показаны 34 промежуточные версии 1 участника) | |||
| Строка 1: | Строка 1: | ||
| − | == Система логического программирования на [http://www.swi-prolog.org | + | __TOC__ |
| + | <br/> | ||
| + | ---- | ||
| + | == Система логического программирования на встроенном [http://www.swi-prolog.org/ SWI‑Prolog] == | ||
| + | === Файлы и ресурсы === | ||
| + | Расположение файлов см. [[Список файлов дистрибутива платформы Гедымин]] | ||
| + | ==== Системные файлы DLL ==== | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | ! Имя !! Описание !! Примечание | ||
| + | |- | ||
| + | | libswipl.dll || библиотека ядра || The Prolog kernel | ||
| + | |- | ||
| + | | pthreadGC2.dll || библиотека потоков выполнения || POSIX thread runtime library (32-bits) | ||
| + | |- | ||
| + | | libgmp-10.dll || библиотека арифметики повышенной точности || The GNU Multiple Precision Arithmetic Library | ||
| + | |} | ||
| + | ==== Файлы DLL для расширения системы (плагины) ==== | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | ! Имя !! Описание !! Примечание | ||
| + | |- | ||
| + | | memfile.dll || библиотека временных файлов в памяти || [http://www.swi-prolog.org/pldoc/man?section=memory-files Memory files] | ||
| + | |- | ||
| + | | readutil.dll || библиотека утилиты быстрого чтения || [http://www.swi-prolog.org/pldoc/man?section=readutil Reading lines, streams and files] | ||
| + | |} | ||
| + | ==== Ресурсные архивы ==== | ||
| + | {| class="wikitable" | ||
| + | |+ | ||
| + | ! Имя !! Описание !! Примечание | ||
| + | |- | ||
| + | | gd_pl_state.dat || файл сохраненного состояния || [http://www.swi-prolog.org/pldoc/man?section=runtime Generating Runtime Applications] | ||
| + | |} | ||
| + | ==== Для разработчиков ==== | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | ! Ссылка на ресурс !! Описание | ||
| + | |- | ||
| + | | [https://github.com/GoldenSoftwareLtd/gedemin-prolog/blob/master/gd_pl/gd_pl.pl gd_pl.pl] || генерация файла сохраненного состояния | ||
| + | |- | ||
| + | | [https://github.com/GoldenSoftwareLtd/gedemin-prolog/tree/master/gd_pl/gd_pl_state gd_pl_state] || папка с файлами для сохраненного состояния, не входящими в стандартную поставку SWI-Prolog | ||
| + | |} | ||
| − | + | <h3 id="pl_classes"> PL-классы </h3> | |
| + | Под термином '''''PL-класс''''' понимается класс, предназначенный на для взаимодействия со встроенным SWI‑Prolog. | ||
| + | <br/>Соответственно, экземпляр PL-класса будет называться '''''PL‑объект'''''. | ||
| + | <h4 id="TgsPLClient"> TgsPLClient </h4> | ||
| + | ;Класс клиента SWI-Prolog. | ||
| + | :<u>Иерархия</u> | ||
| + | ::<code>'''TObject'''</code> | ||
| + | :<u>Методы</u> | ||
| + | ::<code id="Initialise">'''Initialise'''(AParams: String): Boolean</code><br/> | ||
| + | :::''Инициализация SWI-Prolog.'' | ||
| + | ::<code id="IsInitialised">'''IsInitialised''': Boolean</code><br/> | ||
| + | :::''Проверка инициализации SWI-Prolog.'' | ||
| + | ::<code id="Call">'''Call'''(APredicateName: String; AParams: TgsPLTermv): Boolean</code><br/> | ||
| + | :::''Краткая форма для OpenQuery, NextSolution, Cut объекта TgsPLQuery, порождающая одно решение.'' | ||
| + | ::<code id="Call2">'''Call2'''(AGoal: String): Boolean</code><br/> | ||
| + | :::''Выполнение терма (аналог предиката once/1).'' | ||
| + | |||
| + | ::<code id="Cleanup">'''Cleanup''': Boolean</code><br/> | ||
| + | :::''Очистка SWI-Prolog (деинициализация).'' | ||
| + | ::<code id="Compound">'''Compound'''(AGoal: Unsigned short; AFunctor: String; ATermv: TgsPLTermv)</code><br/> | ||
| + | :::''Компоновка терма из функтора (имени терма) и аргументов (вектора термов).'' | ||
| + | ::<code id="LoadScript">'''LoadScript'''(AScriptID: Integer): Boolean</code><br/> | ||
| + | :::''Загрузка Пролог-скрипта по идентификатору.'' | ||
| + | ::<code id="LoadScriptByName">'''LoadScriptByName'''(AScriptName: String): Boolean</code><br/> | ||
| + | :::''Загрузка Пролог-скрипта по имени.'' | ||
| + | ::<code id="ExtractData">'''ExtractData'''(ADataSet: TClientDataSet; APredicateName: String; ATermv: TgsPLTermv)</code><br/> | ||
| + | :::''Извлечение данных Пролог-запроса в клиентский набор данных.'' | ||
| + | ::<code id="MakePredicatesOfSQLSelect">'''MakePredicatesOfSQLSelect'''(ASQL: String; ATr: TIBTransaction; APredicateName: String; AFileName: String; AnAppend: Boolean): Integer</code><br/> | ||
| + | :::''Формирование Пролог-фактов на основе SQL-запроса.'' | ||
| + | ::<code id="MakePredicatesOfDataSet">'''MakePredicatesOfDataSet'''(ADataSet: TDataSet; AFieldList: String; APredicateName: String; AFileName: String; AnAppend: Boolean): Integer</code><br/> | ||
| + | :::''Формирование Пролог-фактов на основе клиентского набора данных.'' | ||
| + | ::<code id="SavePredicatesToFile">'''SavePredicatesToFile'''(APredicateName: String; ATermv: TgsPLTermv; AFileName: String)</code><br/> | ||
| + | :::''Выгрузка данных Пролог-запроса в файл.'' | ||
| + | :<u>Свойства</u> | ||
| + | ::<code id="Debug">'''Debug''': Boolean</code><br/> | ||
| + | :::''Режим отладки.'' | ||
| + | |||
| + | <h4 id="TgsPLQuery"> TgsPLQuery </h4> | ||
| + | ;Класс запроса SWI-Prolog. | ||
| + | :<u>Иерархия</u> | ||
| + | ::<code>'''TObject'''</code> | ||
| + | :<u>Методы</u> | ||
| + | ::<code id="Close">'''Close'''</code><br/> | ||
| + | :::''Закрытие Пролог-запроса.'' | ||
| + | ::<code id="Cut">'''Cut'''</code><br/> | ||
| + | :::''Отсечение следующих решений Пролог-запроса (выполнения предиката).'' | ||
| + | ::<code id="NextSolution">'''NextSolution'''</code><br/> | ||
| + | :::''Поиск следующего решения Пролог-запроса (выполнения предиката).'' | ||
| + | ::<code id="OpenQuery">'''OpenQuery'''</code><br/> | ||
| + | :::''Открытие Пролог-запроса и поиск первого решения (выполнение предиката).'' | ||
| + | :<u>Свойства</u> | ||
| + | ::<code id="Eof">'''Eof''': Boolean</code><br/> | ||
| + | :::''Признак поиска решения Пролог-запроса (выполнения предиката).'' | ||
| + | ::<code id="PredicateName">'''PredicateName''': String</code><br/> | ||
| + | :::''Имя предиката (функтор).'' | ||
| + | ::<code id="Termv">'''Termv''': TgsPLTermv</code><br/> | ||
| + | :::''Аргументы предиката (вектор термов).'' | ||
| + | |||
| + | <h4 id="TgsPLTermv"> TgsPLTermv </h4> | ||
| + | ;Класс вектора термов SWI‑Prolog. | ||
| + | :<u>Иерархия</u> | ||
| + | ::<code>'''TObject'''</code> | ||
| + | :<u>Методы</u> | ||
| + | ::<code id="PutAtom">'''PutAtom'''(Idx: Unsigned short; AValue: String)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа Atom.'' | ||
| + | ::<code id="PutDate">'''PutDate'''(Idx: Unsigned short; AValue: Date)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа Date.'' | ||
| + | ::<code id="PutDateTime">'''PutDateTime'''(Idx: Unsigned short; AValue: Date)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа DateTime.'' | ||
| + | ::<code id="PutFloat">'''PutFloat'''(Idx: Unsigned short; AValue: Real)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа Float.'' | ||
| + | ::<code id="PutInt64">'''PutInt64'''(Idx: Unsigned short; AValue: Int64)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа Int64.'' | ||
| + | ::<code id="PutInteger">'''PutInteger'''(Idx: Unsigned short; AValue: Integer)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа Integer.'' | ||
| + | ::<code id="PutString">'''PutString'''(Idx: Unsigned short; AValue: String)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа String.'' | ||
| + | ::<code id="PutVariable">'''PutVariable'''(Idx: Unsigned short)</code><br/> | ||
| + | :::''Передача по ссылке в терм данных типа Variable (сброс ссылки в изначальное состояние).'' | ||
| + | ::<code id="ReadAtom">'''ReadAtom'''(Idx: Unsigned short): String</code><br/> | ||
| + | :::''Считывание по ссылке из терма данных типа Atom.'' | ||
| + | ::<code id="ReadDate">'''ReadDate'''(Idx: Unsigned short): Date</code><br/> | ||
| + | :::''Считывание по ссылке из терма данных типа Date.'' | ||
| + | ::<code id="ReadDateTime">'''ReadDateTime'''(Idx: Unsigned short): Date</code><br/> | ||
| + | :::''Считывание по ссылке из терма данных типа DateTime.'' | ||
| + | ::<code id="ReadFloat">'''ReadFloat'''(Idx: Unsigned short): Real</code><br/> | ||
| + | :::''Считывание по ссылке из терма данных типа Float.'' | ||
| + | ::<code id="ReadInt64">'''ReadInt64'''(Idx: Unsigned short): Int64</code><br/> | ||
| + | :::''Считывание по ссылке из терма данных типа Int64.'' | ||
| + | ::<code id="ReadInteger">'''ReadInteger'''(Idx: Unsigned short): Integer</code><br/> | ||
| + | :::''Считывание по ссылке из терма данных типа Integer.'' | ||
| + | ::<code id="">'''ReadString'''(Idx: Unsigned short): String</code><br/> | ||
| + | :::''Считывание по ссылке из терма данных типа String.'' | ||
| + | ::<code id="">'''Reset'''</code><br/> | ||
| + | :::''Сброс вектора термов (выполнение метода PutVariable для всего вектора термов).'' | ||
| + | ::<code id="ToString">'''ToString'''(Idx: Unsigned short): String</code><br/> | ||
| + | :::''Считывание по ссылке терма и преобразование к строке.'' | ||
| + | ::<code id="ToTrimQuotesString">'''ToTrimQuotesString'''(Idx: Unsigned short): String</code><br/> | ||
| + | :::''Считывание по ссылке терма и преобразование к строке без обрамляющих кавычек.'' | ||
| + | :<u>Свойства</u> | ||
| + | ::<code id="DataType">'''DataType'''(Idx: Unsigned short): Integer</code><br/> | ||
| + | :::''Тип данных.'' | ||
| + | ::<code id="Size">'''Size''': Unsigned short</code><br/> | ||
| + | :::''Размер вектора термов.'' | ||
| + | ::<code id="Term">'''Term'''(Idx: Unsigned short): Unsigned short</code><br/> | ||
| + | :::''Ссылка на терм.'' | ||
| + | |||
| + | === Пролог-скрипты === | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |- | ||
| + | | https://upload.wikimedia.org/wikipedia/commons/b/b2/Pl_Examples_Script.png | ||
| + | |} | ||
| + | === [[Примеры использования PL-объектов]] === | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |- | ||
| + | | https://upload.wikimedia.org/wikipedia/commons/d/de/Pl_Examples.png | ||
| + | |} | ||
| + | |||
| + | === Учебный пример. Игра крестики-нолики === | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |- | ||
| + | | https://upload.wikimedia.org/wikipedia/commons/4/4a/Xo_game15o9.png | ||
| + | |} | ||
| + | |||
| + | === [http://www.swi-prolog.org/IDE.html Средства разработки] === | ||
| + | |||
| + | ==== [http://lakk.bildung.hessen.de/netzwerk/faecher/informatik/swiprolog/indexe.html SWI-Prolog Editor] ==== | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |- | ||
| + | | https://upload.wikimedia.org/wikipedia/commons/b/bb/SWI-Prolog_Editor.png | ||
| + | |} | ||
| + | |||
| + | ==== [http://www.swi-prolog.org/gtrace.html SWI-Prolog graphical tracer] ==== | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |- | ||
| + | | https://upload.wikimedia.org/wikipedia/commons/a/a5/Swi_graphical_tracer.png | ||
| + | |} | ||
| + | |||
| + | ==== [http://www.swi-prolog.org/pldoc/man?section=profile SWI-Prolog profiler] ==== | ||
| + | {| class="wikitable" | ||
| + | |- | ||
| + | |- | ||
| + | | https://upload.wikimedia.org/wikipedia/commons/d/d9/Swi_profiler.png | ||
| + | |} | ||
| + | <br/> | ||
| + | ---- | ||
| + | == Литература по языку Пролог == | ||
| + | * [http://www.e-reading.club/book.php?book=96404 У.Клоксин, К.Меллиш. Программирование на языке Пролог] | ||
| + | * [http://royallib.com/read/bratko_ivan/programmirovanie_na_yazike_prolog_dlya_iskusstvennogo_intellekta.html#0 И.Братко. Программирование на языке Пролог для искусственного интеллекта] | ||
| + | * [http://www.litportal.kiev.ua/2007/02/16/ivan_bratko_algoritmy_iskusstvennogo_intellekta_na_jazyke_prolog.html И.Братко. Алгоритмы искусственного интеллекта на языке PROLOG] | ||
| + | |||
| + | [[Category:Школа системного администратора]] | ||
| + | [[Category:Руководство разработчика]] | ||
Текущая версия на 13:00, 2 августа 2017
Содержание |
[править] Система логического программирования на встроенном 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.
Соответственно, экземпляр 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)
- Выгрузка данных Пролог-запроса в файл.
- Свойства
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
|
[править] SWI-Prolog profiler
|