Вход/Регистрация
Prolog
вернуться

Неизвестно

Шрифт:

ребенок( X) :- % X - ребенок

семья( _, _, Дети),

принадлежит( X, Дети).

принадлежит( X, [X | L ]).

принадлежит( X, [Y | L ]) :-

принадлежит( X, L).

существует( Членсемьи) :-

% Любой член семьи в базе данных

муж( Членсемьи);

жена( Членсемьи);

ребенок( Членсемьи).

дата рождения( Членсемьи( _, _, Дата, _ ), Дата).

доход( Членсемьи( _, _, _, работает( _, S) ), S).

% Доход работающего

доход( Членсемьи( _, _, _, неработает), 0).

% Доход неработающего

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

Найти имена всех людей из базы данных:

?- существует( членсемьи( Имя,Фамилия, _, _ )).

Найти всех детей, родившихся в 1981 году:

?- ребенок( X), датарождения( X, дата( _, _, 1981) ).

Найти всех работающих жен:

?- жена( членсемьи( Имя, Фамилия, _, работает( _, _ ))).

Найти имена и фамилии людей, которые не работают и родились до 1963 года:

?- существует членсемьи( Имя, Фамилия, дата( _, _, Год), неработает) ),

Год < 1963.

Найти людей, родившихся до 1950 года, чей доход меньше, чем 8000:

?- существует( Членсемьи),

датарождения( Членсемьи, дата( _, _, Год) ),

Год < 1950,

доход( Членсемьи, Доход),

Доход < 8000.

Найти фамилии людей, имеющих по крайней мере трех детей:

?- семья( членсемьи( _, Фамилия, _, _ ), _, [ _, _, _ | _ ]).

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

общий( Список_Людей, Сумма_их_доходов)

Это отношение можно запрограммировать так:

общий( [ ], 0). % Пустой список людей

общий( [ Человек | Список], Сумма) :-

доход( Человек, S),

% S - доход первого человека

общий( Список, Остальные),

% Остальные - сумма доходов остальных

Сумма is S + Остальные.

Теперь общие доходы всех семей могут быть найдены с помощью вопроса:

?- семья( Муж, Жена, Дети),

общий( [Муж, Жена | Дети], Доход).

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

?- семья( Муж, Жена, Дети),

общий( [ Муж, Жена | Дети], Доход),

длина( [ Муж, Жена | Дети], N),

Доход/N < 2000.

Упражнения

4. 1. Напишите вопросы для поиска в базе данных о семьях.

(а) семей без детей;

(b) всех работающих детей;

(с) семей, где жена работает, а муж нет,

  • Читать дальше
  • 1
  • ...
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: