дХОКНЛМШЕ ПЮАНРШ, ЙСПЯНБШЕ ОПНЕЙРШ МЮ ГЮЙЮГ, ЙНМРПНКЭМШЕ ПЮАНРШ МЮ ГЮЙЮГ

 

мЮВЕПРЮРЕКЭМЮЪ ЦЕНЛЕРПХЪ оПЮЙРХЙСЛ ОН ПЕЬЕМХЧ ГЮДЮВ цЕНЛЕРПХВЕЯЙНЕ ВЕПВЕМХЕ хМФЕМЕПМЮЪ ЦПЮТХЙЮ еяйд йПЮРМШЕ ХМРЕЦПЮКШ лЮРЕЛЮРХВЕЯЙХИ ЮМЮКХГ лЮРПХЖШ оПЕДЕКШ оПНХГБНДМШЕ бЕЙРНПМЮЪ ЮКЦЕАПЮ хМРЕЦПЮКЭМНЕ ХЯВХЯКЕМХЕ ртйо ъДЕПМЮЪ ТХГХЙЮ щКЕЙРПНЯРЮРХЙЮ лЮЦМЕРХГЛ нОРХЙЮ хМТНПЛЮЖХНММШЕ РЕУМНКНЦХХ

Предыдущий разделУровень вышеСледующий раздел

Правила

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

Правило состоит из головы (предиката) и тела (последовательности предикатов, разделенных запятыми). Голова и тело разделены знаком :- и, подобно каждой фразе Пролога, правило должно заканчиваться точкой. Запятая в теле правила означает конъюнкцию (&&, логическое и).

Знак :- есть схематическая запись стрелки (<-) и показывает, что из правой части следует левая. Этот знак читается как "если". Интуитивный смысл правила состоит в том, что цель, являющаяся головой, будет истинной, если Пролог сможет показать, что все выражения (подцели) в теле правила являются истинными.


Пример
Правило, определяющее отношение ребенок/2 через отношение отец/2, запишется следующим образом:

 ребенок(X, 
Y) :- отец(Y, X). 
Это означает, что если человек Y является для человека X отцом, то X является ребенком Y. Здесь X и Y - переменные. Напомним, что запись ребенок/2 показывает, что предикат ребенок является функцией от двух аргументов.


Пример
Определим отношение мать/2 через отношения родитель/2 и женщина/1 следующим образом: матерью X для человека Y является его родитель женского рода.

 мать(X, Y) :- родитель(X, Y), женщина(X). 

Предикаты отличаются друг от друга не только именем, но и количеством аргументов. Можно, например, определить отношение мать/1 следующим образом:

 мать(X) 
:- родитель(X, _), женщина(X). 
Так как нам в данном предикате не важно, чьим родителем является данная женщина, то мы использовали анонимную переменную.
 ?- мать(X, Y). X=анна Y=юлия Yes ?- мать(X). X=анна Yes 


Пример
Определим отношение дедушка/2:

 дедушка(X, Y) :- отец(X, Z), отец(Z, 
Y). дедушка(X, Y) :- отец(X, Z), мать(Z, Y). 
Эти правила утверждают, что дедушкой X для человека Y является отец человека Z, который в свою очередь является отцом или матерью человека Y.


Задания

  1. Создайте файл, содержащий следующую базу данных:
    (скопировать файл)
     женщина(анна). мужчина(борис). женщина(юлия).	
    мужчина(олег). женщина(галина). мужчина(антон). женщина(елена). мужчина(павел). 
    родитель(борис,павел). % кто чей родитель(анна,юлия). родитель(анна,антон). родитель(анна,борис). 
    родитель(олег,юлия). родитель(олег,антон). родитель(олег,борис). родитель(галина,анна). 
    родитель(галина,елена). 
  2. Добавьте правила, задающее отношения отец/2, мать/2, мать/1 и дедушка/2, после чего сформулируйте запросы, определяющие всех матерей и дедушек в данной базе.
  3. Определите отношение сестра/2 через отношения родитель/2 и женщина/1.
  4. Сформулируйте правило, определяющее отношение тетя/2 через отношения родитель/2 и сестра/2.

Предыдущий разделУровень вышеСледующий раздел