Подстановки и примеры утверждений



Логические переменные служат для обозначения неопределенных объектов. Областью действия переменной является одно утверждение (факт или правило).

Подстановкой  называется конечное (возможно, пустое) множество пар вида Xi = ti, где Xi¾переменная, а ti¾терм, не содержащий переменную Xi. Результат применения подстановки q к утверждению A обозначается Aq и получается путем замены каждого вхождения в A каждой переменной Xi на соответствующий терм ti.

Утверждение B является примером утверждения A, если найдется такая подстановка q, что B=Aq. Например, факт summa(1,2,3), которое означает, что 1+2=3, является примером утверждения summa(X,Y,3) при применении подстановки q={X=1,Y=2}.

Утверждение С называется общим примером утверждений A B, если найдутся такие подстановки q1 и q2, что C=Aq1 и C=Bq2, т.е. C является примером A и B одновременно. Например, факт summa(1,2,3) является общим примером утверждений summa(X,2,Z) и summa(1,Y,Z) при применении подстановок q1={X=1,Z=3} и q2={Y=2,Z=3}.

 

3.2.5. Пример Пролог¾программы.

 

 

Программа «Родственники» является примером простой Пролог¾программы. На рис 2. показано трехуровневое генеалогическое дерево.

 

 

Родственные отношения можно записать с помощью фактов, соответствующие отношению parent:

parent(‘Памелла’,’Джон’).

parent(‘Памелла’,’Элизабет’).

parent(‘Том’,’Джон’).

parent(‘Том’,’Элизабет’).

parent(‘Джон’,’Анна’).

parent(‘Джон’,’Пат’).

parent(‘Элизабет’,’Эд’).

parent(‘Пат’,’Джим’).

 

Расширим эту программу фактами, определяемыми схемой отношения person.

 

person(‘Памелла’,’ж’,72).

person(‘Том’,’м’,78).

person(‘Джон’,’м’,42).

person(‘Элизабет’,’ж’,35).

person(‘Эд’,’м’,14).

person(‘Анна’,’ж’,20).

person(‘Пат’,’ж’,25).

person(‘Джим’,’м’,3).

 

Теперь мы можем задавать Пролог¾программе вопросы, используя оба отношения.

 

Вопрос 1.

Вопрос ”Является ли Пат родителем Джима?” на Прологе можно задать следующим образом:

 

?-parent(‘Пат’,’Джим’).

 

Пролог-система будет искать в программе факт, совпадающий с вопросом, и, обнаружив такой факт, система выдаст ответ ‘YES’. В случае, когда соответствующий факт не обнаружен, система выдаст ответ ‘NO’.

 

Вопрос 2.

Вопрос ”Кто отец Элизабет и сколько ему лет?” на Прологе можно задать следующим образом:

 

?-parent(Х,’ Элизабет’),person(X,’м’, Y).

 

Пролог-система выдаст ответ:

X=’Том’->

Y=78->

YES

Если возраст не интересует пользователя, то в вопросе используется анонимные переменные, обозначаемые знаками подчеркивания ‘_’.

 

Вопрос 3.

Вопрос ”Кто отец Элизабет?” на Прологе можно задать следующим образом:

 

?-parent(Х,’ Элизабет’),person(X,’м’, _).

 

Пролог-система выдаст ответ:

X=’Том’->

YES

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

Вопрос 3 можно упростить, если задать следующее правило:

“X является отцом Y, если X является родителем Y, и X – мужчина.”

На языке Пролог это правило записывается так:

father(X,Y):-parent(X,Y),person(X,’м’,_).

А вопрос 3 записывается следующим образом:

?-father(X,’Jim’).

 


Дата добавления: 2018-04-04; просмотров: 419;