Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

РУССКАЯ ПАТРИАРХАЛЬНАЯ СЕМЬЯ

Работа добавлена на сайт samzan.net:


УРОК 3.   БАЗА ЗНАНИЙ "РУССКАЯ ПАТРИАРХАЛЬНАЯ СЕМЬЯ"

ЧАСТЬ 1. СЛОЖНО-СОСТАВНЫЕ ВОПРОСЫ

Загрузите файл lab_3.pl.

Напишем программу, анализирующую родственные отношения в большой семье.

Допустим, есть семья, состоящая из пяти человек, и родственные связи между ними  можно представить  следующей схемой:

Начать  описание  такой  семьи  можно   с   описания отношения "родитель".

Имена принято писать с большой буквы, но Пролог воспринимает объекты написанные с большой буквы, как переменные. Решаем эту проблему с помощью заключения имени в апострофы (одинарные кавычки).

родитель(‘Иван_Петрович’, ‘Маша’).

родитель(‘Иван_Петрович’, ‘Миша’).    

родитель(‘Ольга_Николаевн’, ‘Миша’).      

родитель(‘Ольга_Николаевна’, ‘Маша’).

Используя эту начальную группу фактов, попытаемся определить правило для отношения отец. Отец это, во-первых, родитель, а, во-вторых, мужчина. Учитывая все вышесказанное:

отец(_некто,_ребенок):-родитель(_некто,_ребенок), пол(_некто,мужской).

Однако, задав вопрос типа ?-отец(‘Иван_Петрович’, ‘Маша’) мы получим ответ false, поскольку вторая подцель в правиле является ложно (предложение с именем "мужчина" вообще отсутствует в программе). Поэтому для полноты картины введем аналогичные факты для всех членов семьи.

пол(‘Петр_Петрович,мужской).

пол(‘Иван_Петрович,мужской).

пол(‘Ольга_Николаевна,женский).

пол(‘Миша,мужской).

пол(Маша,женский).  

Теперь отношение отец стало вполне корректным. Аналогично можно определить отношение мать.  

мать(_некто,_ребенок):-родитель(_некто,_ребенок), пол(_некто,женский).  

Правила для отношений "дочь" и "сын" очень похожи на  два предыдущих правила. Например, правило для отношения "дочь": _x - дочь _y, если _y - родитель _х, и _х принадлежит к женской половине человечества.

дочь(_X,_Y) :- родитель(_Y,_X),пол(_X,женский).

сын(_X,_Y) :- родитель(_Y,_X),пол(_X,мужской).

Если два человека  являются  родителями  кого-то,  то логично предположить  (берем стандартную семью), что  они являются также и супругами.

муж(_он,_она) :- отец(_он,_Реб),мать(_она,_Реб).

жена(_она,_он) :- мать(_она,_Реб),отец(_он,_Реб).

Следующие отношения, которые мы рассмотрим, есть брат и сестра.

брат(_X,_Y):-мать(_Z,_X),мать(_Z,_Y),пол(_X,мужской),_X \= _Y.

сестра(_X,_Y):-мать(_Z,_X),мать(_Z,_Y),пол(_X,женский),_X \= _Y.

Первое правило гласит, что _X является братом _Y,  если они оба имеют одних и тех же родителей (мать в частности), и _X обязательно должен быть  мужчиной (иначе  какой же  он брат?). Последнее условие необходимо, чтобы _Х не  оказался братом самому себе.  Второе  правило  целиком   аналогично первому и никаких новых пояснений здесь не требуется. Это правило не описывает полностью всех братьев данной семьи. Осталось еще ввести два факта:

брат(‘Петр_Петрович’, ‘Иван_Петрович’).

брат(‘Иван_Петрович’,’Петр_Петрович’).

То, что их два, связано с тем, что первый аргумент означает "кто есть брат", а второй - "для кого". Теперь можно поэкспериментировать с вопросами к построенной базе данных. Например, выясним  -  кто имеет  брата,  женатого  на Ольге Николаевне? Такой вопрос можно задать следующим образом:

?-брат(_X,_Y),муж(_Y, ‘Ольга_Николаевна’).

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

Естественно, _X = ‘Петр Петрович’, а _Y = ‘Иван  Петрович’, то  есть  у Петра  Петровича  есть  брат,  удовлетворяющий условиям запроса. Кстати, обратите внимание на то что,  если после вывода первого ответа вы нажмете клавишу «;», то получите два совершенно одинаковых ответа.

Задание 3.1

Выясните, почему именно два одинаковых ответа (нарисуйте дерево вывода).

На данный момент у нас имеется следующая база данных:

родитель(‘Иван_Петрович’, ‘Маша’).

родитель(‘Иван_Петрович’, ’Миша’).    

родитель(‘Ольга_Николаевна’, ‘Миша).      

родитель(‘Ольга_Николаевна’, ‘Маша’).

пол(‘Петр_Петрович,мужской).

пол(‘Иван_Петрович,мужской).

пол(‘Ольга_Николаевна,женский).

пол(‘Маша,женский).

пол(Миша,мужской).

мать(_X,_Y):-родитель(_X,_Y),пол(_X,женский).

отец(_X,_Y):-родитель(_X,_Y),пол(_X,мужской).

дочь(_X,_Y):-родитель(_Y,_X),пол(_X,женский).

сын(_X,_Y):-родитель(_Y,_X),пол(_X,мужской).

муж(_X,_Y):-отец(_X,_Z),мать(_Y,_Z).

жена(_X,_Y):-мать(_X,_Z),отец(_Y,_Z).

брат(_X,_Y):-мать(_Z,_X),мать(_Z,_Y),пол(_X,мужской),_X \= _Y.

сестра(_X,_Y):-мать(_Z,_X),мать(_Z,_Y),пол(_X,женский),_X \= _Y.

брат(‘Петр_Петрович’, ‘Иван_Петрович’).

брат(‘Иван_Петрович’, ‘Петр_Петрович’).

Продолжим рассмотрение генеалогического дерева и начнем с того, какое положение занимает Петр Петрович по отношению к другим  членам семьи. Для Маши  с  Мишей  он  является  дядей. Отразим этот факт в виде правила:

дядя(_X,_Y) :- родитель(_Z,_Y),брат(_X,_Z).

Для хозяйки он приходится деверем (об этом уже  знают значительно меньшее число людей).

     деверь(_X,_Y) :- брат(_X,_Z),муж(_Z,_Y).

Иными словами, деверь - это брат мужа. Последнее,  что  осталось  описать,  -  это  кто  кем является для Петра Петровича.

племянник(_X,_Y):-родитель(_Z,_X),брат(_Y,_Z),пол(_X,мужской).

племянник(_X,_Y):-родитель(_Z,_X),сестра(_Y,_Z),пол(_X,мужской).

племянница(_X,_Y):-родитель(_Z,_X),брат(_Y,_Z),пол(_X,женский).

племянница(_X,_Y):-родитель(_Z,_X),сестра(_Y,_Z),пол(_X,женский).

Так как мы уже ввели понятие дяди, мы можем его использовать для определения племянника:

племянник(_X,_Y):-дядя(_Y,_X),пол(_X,мужской).

племянница(_X,_Y):-дядя(_Y,_X), пол(_X, женский).

Невестка - жена брата (обратное отношение для деверя).

невестка(_X,_Y):-жена(_X,_Z),брат(_Z,_Y).

Теперь  мы  полностью   описали   отношения, которые наблюдаются  в этой  небольшой семье.

Задание 3.2

В качестве небольшого упражнения, выясните:  Верно ли, что если _X является деверем _Y, то _Y является невесткой _X, и если верно, то найти все пары _X и _Y. Задайте соответствующие вопросы.

_______________________________________________________________

Самостоятельное задание:

На этом уроке мы решили задачу описания семейных отношений для небольшой семьи из пяти  человек.

родитель(‘Иван_Петрович’, ‘Маша).

родитель(‘Иван_Петрович’, ‘Миша’).

родитель(‘Ольга_Николаевна’, ‘Маша’).

родитель(‘Ольга_Николаевна’, ‘Миша’).

пол(‘Петр_Петрович’,мужской).

пол(‘Иван_Петрович’,мужской).

пол(‘Ольга_Николаевна’,женский).

пол(‘Миша’,мужской).

пол(‘Маша’,женский).

брат(‘Петр_Петрович’, ‘Иван_Петрович’).

брат(‘Иван_Петрович’, ‘Петр_Петрович’).

мать(_X,_Y):-родитель(_X,_Y),пол(_X,женский).

отец(_X,_Y):-родитель(_X,_Y),пол(_X,мужской).

дочь(_X,_Y):-родитель(_Y,_X),пол(_X,женский).

сын(_X,_Y):-родитель(_Y,_X),пол(_X,мужской).

муж(_X,_Y):-отец(_X,_Z),мать(_Y,_Z).

жена(_X,_Y):-мать(_X,_Z),отец(_Y,_Z).

брат(_X,_Y):-мать(_Z,_X),мать(_Z,_Y),пол(_X,мужской),_X \= _Y.

сестра(_X,_Y):-мать(_Z,_X),мать(_Z,_Y),пол(_X,женский),_X \= _Y.

дядя(_X,_Y):-родитель(_Z,_Y),брат(_X,_Z).

деверь(_X,_Y):-брат(_X,_Z),муж(_Z,_Y).

племянник(_X,_Y):-родитель(_Z,_X),брат(_Y,_Z),пол(_X,мужской).

племянник(_X,_Y):-родитель(_Z,_X),сестра(_Y,_Z),пол(_X,мужской).

племянница(_X,_Y):-родитель( _Z,_X),брат(_Y,_Z),пол(_X,женский).

племянница(_X,_Y):-родитель(_Z,_X),сестра(_Y,_Z),пол(_X,женский).

невестка(_X,_Y):-жена(_X,_Z),брат(_Z,_Y).

 

Сейчас  мы расширим их число.

Рассмотрите следующую схему:

Сохраним текст программы под новым именем. Откроем текст программы во встроенном редакторе.( Для этого в диалоговом окне выберите пункт меню File, в выпавшем меню выберите Navigator. Откроется окно, в котором отображен список файлов, зеленым цветом обозначены открытые файлы. Для просмотра и редактирования файла необходимо выбрать необходимый файл одинарным нажатием мышью и нажать на значок карандаша, изображенный вверху окна (крайний правый).) Далее в окне редактора выбираете пункт меню File, в выпавшем списке выбираете пункт Save as. Будет открыто окно, в котором при желании вы сможете изменить путь к файлу, это нам сейчас не нужно,  просто в конце строки вводим желаемое имя, например, lab_2last.pl и нажимаете кнопку Ok.

Задание 3.3

Добавьте к написанной программе множество фактов, необходимых для описания отношений в этой семье. Найдите по полученной программе всех мужчин, которые являются отцами.

Задание 3.4

Объедините две семьи следующим образом: Пусть Миша женится на Люсе и у них родится сын - Андрейка.

Задание 3.5

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

а) внук,дед,бабушка;

б) тетя,племянник,племянница (используя определение тети);

в) шурин - брат жены;

г) зять - муж сестры или дочери;

д) свекор - отец мужа;

е) свекровь - мать мужа;

ж) тесть - отец жены;

з) теща - мать жены;

и) сноха - жена сына для отца;

к) невестка - жена сына для матери;

л) золовка - сестра мужа;

м) свояченица - сестра жены;

н) сват - отец одного из супругов для родителей другого;

о) сватья - мать одного из супругов для родителей другого;

Задайте вопросы для каждого нового отношения.




1. Определение местных потерь напора
2. . Торможение ангиогенеза один из возможных методов борьбы с опухолями на ранних стадиях развития
3. Сутність кредиту і його роль в світовій практиці
4.  Богданов Юрий МФТИ ГУ 2
5. разному Например И
6. ти человека где можно можно обойтись без количестх оценок объекта получаемых с помощью измерений
7. Голубиные
8. связи между узлами связи в определённой полосе частот или с определённой скоростью передачи
9. К Каст Кристин Каст Избранная Посвящается всем тем кто забрасывал нас письмами требуя продолжения
10. Тема- Школы менеджмента в теории управленияПоложение о том что во всяком предприятии есть два организма мат
11. Вексель как один из способов прекращения денежного обязательства
12. Астраханский государственный технический университет Дмитровский филиал Кафедра экологии УТВ.html
13. тема подчиняющаяся всеобщим законам и в то же время имеющаяся специфические особенности функционирования и
14. Subject Incentive progrm Issue Dte Revision Purpose The Upselling Incentive Progrm is developed to generte
15. Тема 100 S- Стойкий быстродействующий очаг поражения формируется при выбросе АОХВ - хлор - ФОС - фосген
16. Проект по восстановлению воздушной линии связи на железнодорожном участке
17. Реферат- Химические загрязнения среды и здоровье человека
18. Обязательственное право и обязательства Договоры куплипродажи
19. На тему- Диалектика
20. Курсовая работа- Характеристика внешних факторов, влияющих на деятельность организации