Лабораторная работа №2 Создайте правила для поиска

advertisement
Лабораторная работа №2
Создайте правила для поиска следующих родственных связей (номер задания
должен соответствовать вашему порядковому номеру в журнале):
1. бабушка, кузен (двоюродный брат)
2. дедушка, свекр (отец мужа)
3. отец, зять (муж дочери или муж сестры)
4. мать, сватья (мать зятя или невестки)
5. сын, свояк (муж сестры жены)
6. дочь, внучатый племянник (сын племянника или племянницы)
7. внук, свекровь (мать мужа)
8. внучка, свояченица (сестра жены)
9. брат, золовка (сестра мужа)
10. сестра, деверь (брат мужа)
11. муж, двоюродный дед (брат бабушки или дедушки)
12. жена, сват (отец зятя или невестки)
13. дядя, невестка (жена сына или жена брата)
14. тетя, шурин (брат жены)
15. племянник, кузина (двоюродная сестра)
16. племянница, теща
17. предок, тесть
18. свекровь (мать мужа), кузен (двоюродный брат)
19. внучка, золовка (сестра мужа)
20. деверь (брат мужа), внучатый племянник (сын племянника или племянницы)
21. свояченица (сестра жены), племянница
22. невестка (жена сына или жена брата), бабушка
23. внук, свояк (муж сестры жены)
24. двоюродный дед (брат бабушки или дедушки), мать
25. свекр (отец мужа), племянница
1. Загрузите пролог и перейдите в окно редактора Alt+E (Edit).
2. В разделе описания доменов определите синоним для строкового типа данных:
DOMAINS /* раздел описания доменов */
s=string /* вводим синоним для строкового типа данных */
3. В разделе описания предикатов определите родственные отношения которые будут
в вашей программе:
PREDICATES /* раздел описания предикатов */
mother(s,s) /* предикат мама будет иметь два аргумента строкового типа */
grandmother(s,s) /* то же имеет место и для предиката бабушка */
4. В разделе описания предложений задайте отношение родственных связей и
напишете предложения для поиска родственных связей по индивидуальному
варианту:
CLAUSES /* раздел описания предложений */
mother("Natasha", "Dasha").
/* "Наташа" и "Даша" связаны отношением
мама */
mother("Dasha", "Masha").
/* "Даша" и "Маша" также принадлежат
отношению мама */
grandmother(X,Y):/* X является бабушкой Y, если найдется такой Z, что */
mother(X,Z),
/* X является мамой Z */
mother(Z,Y).
/* Z является мамой Y */
5. Для запуска программы нажимаем Alt+R (Run). Так как раздела описания
внутренней цели в нашей программе не было, Пролог система выведет
приглашение на ввод внешней цели ("GOAL:"). Вводим вопросы, наблюдаем
результаты.
Найти людей в заданной родственной связи
GOAL: grandmother(X,Y)
X= Natasha, Y= Masha
1 Solution
Найти только внучек
GOAL: grandmother(_,Y)
Y= Masha
1 Solution
6.
Решите поставленную задачу с учетом пола, для этого нужно:
 описать предикаты man(s), woman(s), parent(s,s).
 в разделе описания предложений, использовать только отношения man, woman,
parent.
 создать предложения для ранее определенных отношений
mother(X,Y):-woman(X),parent(X,Y).
7. Повторить пункт 5.
Расширение программы для работы со списками
1.
Создать предикат, который будет для заданного списка определять “кто есть кто”
go(X):-L=["Sasha", "Natasha", "Masha"],whoall(X,L).
2.
Для этого нужно описать работу со списком для просмотра каждого его элемента
whoall(X,[X|_]):-whois(X).
whoall(X,[_|T]):-whoall(X,T).
3.
И для каждого элемента списка определить “кто он”
whois(X):-grandmother(X,_),write(" is grandmother/").
whois(X):-mother(X,_),write(" is mother/").
whois(X):-man(X),write(" is man/").
whois(X):-woman(X),write(" is woman/").
Download