Основные конструкции пролога: Константы (Атомы – начинаются со строчной буквы и содержат только буквы и цифры, Целые и вещественные числа), Факты, Правила, Вопросы, Переменные.
Символы, используемые в Прологе - A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 !@#$%&‘()=-`^|\[]_~@+;*:<>,.?/
Пролог-программы состоят из термов.
Терм – это лексическая единица программы. Это либо константа, либо переменная, либо структура.
ПРОЛОГ является языком исчисления предикатов (обозначаются F(x), F(x, y), F(x, y, z)).
Факты
Пример: факт «Джону нравится Мери».
likes(john, mary).
likes - имя отношения, предикат с 2-мя аргументами
jon, mary - имя объекта, аргументы
likes, john, mary - атомы.
Правила оформления фактов
- Имена всех отношений и объектов должны начинаться со строчной буквы.
- Сначала записывается имя отношения. Затем через запятую записываются имена объектов, а весь список имен объектов заключается в круглые скобки.
- Каждый факт должен заканчиваться точкой.
- Важно соблюдать порядок объектов.
Задача ПРОЛОГ - программы заключается в том, чтобы доказать, является ли заданное целевое утверждение следствием из имеющихся фактов и правил.
Имея некоторую совокупность фактов, мы можем обращаться к прологу с вопросами о них. ?- has(mary, book).
Два факта совпадают, если их предикаты совпадают и их аргументы попарно совпадают. Результатом поиска является ответ да или нет.
Пример:
man(john). woman(mary). has(mary, book).
|
?-man(john). – yes ?-has(mary, book). - yes ?-man(mary). - no ?-man(bob). - no |
likes(john, flowers). likes(john, mary). likes(pol, mary).
|
?- likes(john, X). X=flowers; X=mary; no ?- likes(X, mary). X=john; X=pol; no |
Конъюнкции
«Существует ли что-нибудь такое, что нравится обоим - Джону и Полу»?
Это можно интерпретировать так:
существует ли такой X, что утверждения likes(john, X) и likes(pol, X) оба согласованы с базой данных. ?-likes(john, X), likes(pol, X).
Правила
Рассмотрим БД: thief(john). likes(mary, сheese). likes(mary, wine). |
Определим правило: Джону нравятся любой, кому нравится вино. likes(john, X) :- likes(X, wine). Человек может украсть вещь, если он вор и ему эта вещь нравится. can_steal(X, Y) :- thief(X), likes(X, Y). |