Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Теоретическая часть. Краткое описание основ языка Пролог




Краткое описание основ языка Пролог

Программа на языке Пролог преимущественно состоит из списка логических утверждений, которые можно разделить на факты и общие правила. Эти утверждения составляются из имен предикатов, переменных и их значений, которые представляют собой символьную строку, начинающуюся с буквы, а также совокупности логических операций. В конце каждого утверждения ставится точка ".". Переменные обязательно начинаются с прописной буквы, поэтому все значения должны начинаться со строчной буквы. Использующиеся в Прологе обозначения логических операций представлены в табл. 1.

 

Табл. 1. Логические операции в Прологе

Имя операции Логическая операция Обозначение в Прологе
и ,
или ;
если :–
не not

 

Рассмотрим некоторые примеры утверждений на языке Пролог. Ниже приведен пример списка фактов, не содержащих переменных.

man(serg).

man(alex).

father(serg, alex).

mother(kat, serg).

Эти факты говорят, что предикаты "man", "father", "mother" истинны при указанных значениях аргументов. Пролог работает в рамках предположения о замкнутости базы знаний. Это означает то, что все предикаты будут ложны для всех значений переменных, для которых не было указано обратное.

Общие правила в Прологе записываются так же, как и факты, но в них присутствуют переменные. При этом подразумевается, что общее правило верно при всех значениях всех входящих в него переменных. Иными словами, правило

p1(X):– p2(X,Y).

означает логическое выражение

.

Рассмотрим некоторые примеры общих фактов, записанных на языке Пролог, и приведем для них соответствующие формулы в логике предикатов.

father(X, Y):– man(X), parent(X, Y).

Если некто X является мужчиной и родителем Y, то X – отец Y.

parent(X, Y):– mother(X, Y); father(X, Y).

X является родителем Y, если X – отец или мать Y.

grandfather(X, Y):– father(X, Z), parent(Z, Y).

X является дедушкой Y только тогда, когда X является отцом (некоторого) родителя Y.

 

За исполнение программы на языке Пролог отвечает интерпретатор, который интерактивно взаимодействует с пользователем, отвечая на его запросы. Запрос к интерпретатору также представляется в виде логического выражения, истинность которого требуется установить. Рассмотрим следующую простую программу.

mother(X, Y):– woman(X), parent(X, Y).

father(X, Y):– man(X), parent(X, Y).

grandfather(X, Y):– father(X, Z), parent(Z, Y).

man(serg).

man(alex).

woman(kat).

parent(serg, victor).

parent(kat, victor).

parent(victor, alex).

И посмотрим на следующие запросы, начинающиеся с приглашения "?–", на которые интерпретатор возвращает некоторый ответ.

?– father(serg, victor).

Yes

?– grandfather(serg, alex).

Yes

?– mother(kat, alex).

No

?– father(victor, alex).

No

Как видно, для обработки этих запросов интерпретатору необходимо выполнить логический вывод, а не просто обратиться к базе правил. Также видно, как действует предположение о замкнутости базы знаний: поскольку в базе нет фактов об истинности parent(kat, alex) и man(victor), то последние два запроса возвращают "Нет".

В Прологе существуют также и запросы в виде выражений с переменными. Посмотрим, как работают эти запросы.

?– mother(kat, X).

X = victor

Yes

?– grandfather(X, alex).

X = serg

Yes

?– grandfather(X, Y).

X = serg, Y = alex

Yes

?– grandfather(X, kat).

No

?– man(X).

X = serg

Yes

Здесь можно отметить следующее. В подобного рода запросах предполагается квантор существования для входящих в него переменных. Выражение истинно, если найдется хотя бы одно подходящее значение X (не имеет значения, как именно обозначать переменные в запросе). В действительности, при нахождении в базе первого значения, для которого введенное выражение истинно, интерпретатор спрашивает пользователя, продолжать ли поиск. Поиск продолжается при нажатии команды ";" (или) до тех пор, пока не будет дан ответ "Нет" в связи с исчерпанием всех возможностей, например,

?– man(X).

X = serg;

X = alex;

No

Более сложные выражения в запросах также допустимы, например,

?– mother(kat, X), father(Y, X).

X = victor, Y = serg

Yes

Этот запрос позволяет определить, кто является отцом сына kat.

­Следует обратить внимание на некорректность работы программы, содержащей противоречия вида

something(X):– not(something(X)).

а также циклические определения вида

man(X):– not(woman(X)).

woman(X):– not(man(X)).

 




Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 342; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.