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

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

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

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.2.2025

УРОК 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. ВАРІАНТ 1 Завдання 1.
5. Вариант 6 1 Особенности рассмотрения судом дел по защите прав потребителей3 2
6.  В электрической цепи с идеальным источником тока вычислить напряжения если ; ;
7. управление медперсоналом
8. Студенческая весна СурГПУ 2014 Направление номинация
9. Вероятностные процессы и математическая статистика в автоматизированных системах.html
10. Контрольная работа по дисциплине- Конституционное государственное право России