Подстановки и примеры утверждений
Логические переменные служат для обозначения неопределенных объектов. Областью действия переменной является одно утверждение (факт или правило).
Подстановкой называется конечное (возможно, пустое) множество пар вида 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; просмотров: 744; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!