- •Кафедра Информационных систем и вычислительной техники Национального минерально-сырьевого университета «Горный"
- •Содержание
- •История развития и современное состояние языка prolog
- •Тенденции в истории развития языка Prolog
- •Области применения языка Prolog
- •Современные реализации языка Prolog
- •Поддержка веб-технологий в реализацях Prolog
- •Основы разработки prolog-программ
- •Общие сведения о языке Prolog
- •Понятие факта, правила, запроса и процедуры
- •Механизм сопоставления и поиска с возвратом
- •Основные элементы языка Prolog
- •Среда разработки программ pie и система swi-prolog
- •Основы работы в консоли Prolog
- •Основы работы с программными файлами
- •Справка и помощь в среде swi-Prolog
- •Основы трассировки и отладки в среде pie и swi- Prolog
- •Графические интерфейсы на базе swi-Prolog/xpce
- •Загрузка и запуск программ swi-Prolog'a
- •Использование ярлыков для запуска программ
- •Использование командных и скриптовых сценариев
- •Среда разработки turbo-prolog
- •Структура программы на Turbo Prolog'e
- •Оболочка системы Turbo Prolog
- •Отладка и трассировка программ
- •Работа с простейшими программами в Turbo Prolog'e
- •Работа с графикой в Turbo Prolog'e
- •Среда разработки visual prolog
- •Интегрированная среда разработки
- •Разработка консольного проекта
- •Разработка gui проекта на Visual Prolog'e
- •Prolog — язык логического программирования
- •Системы основанные на знаниях
- •Логические модели и логическое программирование
- •Простейшие конструкции языка предикатов
- •Предикатные формулы
- •Определение правильно построенной формулы
- •Логический вывод
- •6.6.1. Правило резолюции для простых предложений
- •Правило резолюции для сложных предложений
- •Простая резолюция сверху вниз
- •Общая резолюция сверху вниз
- •Унификаторы и примеры унификации
- •Решение задач и извлечение ответа
- •Приложение 1. Запуск Turbo-Prolog в ос Windows 7
- •1. Стандартные предикаты ввода данных.
- •Предикаты преобразования данных
- •Предикаты работы с окнами.
- •Предикаты работы с файлами.
- •Предикаты управления экраном.
- •Предикаты обработки строк.
- •Предикаты работы с графикой.
- •Разные предикаты.
- •Правила вычисление атрибутов экрана.
- •Приложение 3. Пример программы построения дерева синтаксического анализа
- •Интеллектуальные информационные системы prolog - язык разработки интеллектуальных и экспертных систем
Основные элементы языка Prolog
Аргументы предложений Prolog-программы называются термами, а саму Prolog-программу можно рассматривать как сеть отношений, существующих между термами.
Каждый терм обозначает некоторый объект предметной области и записывается как последовательность литер, которые делятся на четыре категории: прописные буквы, строчные буквы, цифры и спецзнаки.
Объекты данных (термы)
Простые термы Структуры
Константы Переменные
Атомы Числа
Рис. 2.1. Основные объекты данных языка Prolog.
Стандартный Prolog распознает тип объекта по его синтаксической форме и не требует какую либо дополнительную информацию (наподобие объявления типа данных) для того, чтобы распознать тип объекта. В качестве основных объектов данных (рис. 2.1) обычно выделяет три типа термов: константы, переменные (простые термы) и структуры (составные термы).
• Константа — поименованный конкретный объект или конкретное отношение. Существует два вида констант - атомы и числа. Атом - это либо последовательность латинских букв, цифр и знака подчеркивания, начинающаяся со строчной буквы, либо произвольная группа символов, заключенная в апострофы (одинарные кавычки). Иногда допускается использование и двойных кавычек. Примеры записи констант: ivan, ‘Ivan', invoice_n, “иван”, ‘№_счета', 'Иван'.
Числа в Prolog бывают целыми (1, 1024, 0, -97) и вещественными (3.14, -0.0035, -0.5e4). Вещественные числа используются редко. Причина в том, что язык предназначен в первую очередь для обработки символьной, а не числовой информации. При символьной обработке используют целые числа, например, для подсчета количества элементов списка, а нужда в вещественных числах очень невелика.
Переменная — обозначение объекта, значения которого меняется в ходе выполнения программы. В Prolog она имеет имя, начинающееся с прописной буквы или знака подчеркивания. Например: Name, X, Invoice_n. Переменная называется связанной, если имеется объект, который она обозначает. При отсутствии такого объекта переменная называется свободной. Для обозначения переменной, на которую отсутствует ссылка в программе, используется анонимная переменная, которая обозначается одиночным знаком подчеркивания «_». Область действия любой из переменных - это предложение. Одноименные
переменные в разных предложениях могут иметь разные значения.
Список — объект, содержащий внутри произвольное число других объектов, упорядоченная последовательность элементов произвольной длины. Он задается перечислением элементов через запятую в квадратных скобках. Например:
[1,2,3,4] % список числ
[a,b,c] % список констант
["Aa", "Bb", "Cc"] % список строк
[1, a, "Aa", [22,33,44]] % смешанный список
[] % пустой список
Список является рекурсивным составным объектом. Он состоит из двух частей: головы списка, которым является первый элемент, и хвоста списка, который включает все следующие элементы.
?- А=[[янв,31], [фев,28], [март,31]] , A=[X|Y].
A = [[янв, 31], [фев, 28], [март, 31]],
X = [янв, 31],
Y = [[фев, 28], [март, 31]].
• Структура (составной терм) — объект, состоящий из совокупности других объектов, которые называются компонентами. Структура в Prolog записывается с помощью указания ее функтора и компонент. Компоненты заключаются в круглые скобки и разделяются запятыми. Функтор записывается перед скобками. Компоненты сами являются термами. Например, в факт likes входит структура book(_,_):
likes ( "Иван" , book ( “название”, “автор” ) ).
Составные термы аналогичны записям Паскаля или структурам Си. Они представляют собой определяемые программистами объекты произвольной сложности.
• Предикат — логическая функция одного или нескольких аргументов, принимающая значение - истина или ложь. Записывается в виде составного терма. Аргументы перечисляются через запятую и представляют собой какие-то объекты или свойства объектов, а имя предиката обозначает связь или отношение между аргументами. Предикат однозначно определяется парой: имя и количество аргументов. Количество параметров предиката называют его арностью (arity) и указывают через «/» после его имени.
likes(Who, What). likes(Who, What, When).
Два предиката с одинаковым именем, но с разным числом аргументов, считаются различными. Например, предикаты likes/2 и likes/3 - это два различных предиката. Следует особо отметить, что имена предикатов записываются строчными буквами и не допускают пробелов. Поэтому в именах предикатов в качестве разделителей можно использовать символ подчеркивания.
Заканчивая разговор об основных элементах языка Prolog, отметим, что все они в той или иной степени составляет основу формирования фактов и правил - основных конструкций Prolog-программ. Что касается правил, то при их формировании для описания одного и того же знания могут быть использованы различные способы описания этого знания.
Например, всем известно, что бабушка человека - это мама его мамы или мама его папы. Но для описания этого знания возможны различные конструкции правил:
grandmama(X, Y):- mama(X, Z), mama(Z, Y). grandmama(X, Y):- mama(X, Z), papa(Z, Y).
или
grandmama(X, Y):- mama(X, Z), mama(Z, Y);
mama(X, Z), papa(Z, Y).
или
grandmama(X, Y):- mama(X, Z),
(mama(Z, Y); papa(Z, Y)).
Выбор той или иной конструкции зависит не только от вкуса человека, разрабатывающего код, но и от его квалификации, знания особенностей работы конкретной Prolog-среды. Однотипные действия, реализованные в разных конструкциях могут приводить к различным затратам ресурсов компьютера и скорости выполнения программы.
Эти замечание, приведенные в главе об основных элементах языка, имели своей целью только обратить ваше внимание на то, что для профессиональной работы необходимо не только знания об основных элементах и конструкциях языка, но и об реализованных взаимодействиях между ними в той среде, с которой вы работаете. Но об этом значительно позднее, а пока переходим к знакомству со средами разработки и запуска программ.
