Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

ОдинИз(НаписалДмитриев,Книги),

ОдинИз(НаписалКонстантинов,Книги),

ОдинИз(Прозаик,Пассажиры),

% Сталось, що кожен з них узяв с собою книгу, написану одним з пасажирів.
% Перевірка на унікальність книг необхідна тут, оскільки
% саме тут говоримо, що кожен пасажир читав одну з книг, %написаних іншими пасажирами
одинИз(К1,Книги),
одинИз(К2,Книги),not(К1=К2),
одинИз(К3,Книги),not(К1=К3),not(К2=К3),
одинИз(К4,Книги),not(К1=К4),not(К2=К4),not(К3=К4),

Пьеса = книга(_,пьеса), одинИз(Пьеса,Книги),
КнигаПоИстории = книга(_,история),

одинИз(КнигаПоИстории,Книги),
ПроизведениеДмитриева = книга(дмитриев,_),

одинИз(ПроизведениеДмитриева,Книги),
НаписалАлексеев = книга(алексеев,_),

одинИз(НаписалАлексеев,Книги),
НаписалБорисов = книга(борисов,_),

одинИз(НаписалБорисов,Книги),
НаписалКонстантинов = книга(константинов,_),

НаписалДмитриев = книга(дмитриев,_),


% у пасажирів заповнюється список книг, таким чином

формуються всі можливі комбінації рішень.
% список пасажирів впорядкований.
читал(Алексеев,К1),читал(Борисов,К2),

читал(Константинов,К3),читал(Дмитриев,К4),

% ПЕРЕВІРКА ГІПОТЕЗИ %

% Олексіїв і Борисов, кожен дочитав свою книгу, умовились на завтра обмінятись ними.

Алексеев = книголюб(алексеев,_,

[КнигаЧиталАлексеев,КнигаЧиталБорисов]),
Борисов = книголюб(борисов,_,

[КнигаЧиталБорисов,КнигаЧиталАлексеев]),

% Поет читав п’єсу. (В смислі: поет узяв з собою п’єсу, тобто
% це була його перша прочитана книга і, можливо, єдина).

% поет узяв з собою п’єсу
взялССобой(Поэт,Пьеса),

% Прозаїк, дуже молода людина, що видрукував свою першу %книгу, казав, що в житті не читав і не читає нічого з історії.
not(читал(Прозаик, КнигаПоИстории)),

% Борисов купив твір Дмитриєва.
взялССобой(Борисов,ПроизведениеДмитриева),

% Дмитриев - не прозаїк, т.к. прозаїк випустив всього одну книгу, а Борисов купив одне з декількох творів Дмириева
одинИз(Дмитриев,Пассажиры),

Дмитриев = книголюб(дмитриев,НеПрозаик,_),
not(НеПрозаик = "прозаик"),

% Ніхто з пасажирів не купляв і не читав книгу,

написану ним самим.

 

not(читал(Алексеев, НаписалАлексеев)),
not(читал(Борисов, НаписалБорисов)),
not(читал(Константинов, НаписалКонстантинов)),
not(читал(Дмитриев, НаписалДмитриев)).

% процедура для фільтрації не унікальних рішень
уникальные_решения([],Уникальные_Решения,

Уникальные_Решения).
уникальные_решения([Решение|Хвост_Решений],

Уникальные_Решения,Уникальные_Решения_Выход):-
not(одинИз(Решение,Уникальные_Решения)),
уникальные_решения(Хвост_Решений,

[Решение|Уникальные_Решения],

Уникальные_Решения_Выход).
уникальные_решения([Решение|Хвост_Решений],

Уникальные_Решения,Уникальные_Решения_Выход):-
одинИз(Решение,Уникальные_Решения),
уникальные_решения(Хвост_Решений,

Уникальные_Решения,Уникальные_Решения_Выход).

% формує список унікальних рішень
списокРешений(Список_Уникальных_Решений):-
findall(Пассажиры,ищемРешение(Пассажиры),

Список_Всех_Решений),
уникальные_решения(Список_Всех_Решений,[],

Список_Уникальных_Решений).

% процедура перебирає список рішень і викликає процедуру вивода кожного рішення на екран в читабельному вигляді
выводРешений():-
списокРешений(Список_Уникальных_Решений),
выводРешений(Список_Уникальных_Решений).
выводРешений([]).
выводРешений([Решение|ОстальныеРешения]):-
nl,write("Вывод решения:"),nl,
write(tab,"Кто кем был?"),nl,
печатьРешенияКтоКемБыл(Решение),
write(tab,"Кто что читал?"),nl,
печатьРешенияКтоЧтоЧитал(Решение),
выводРешений(ОстальныеРешения).

% вивід кожного рішення на екран в читабельному вигляді
% відповідь на питання: "Кто кем был?"
печатьРешенияКтоКемБыл([]).
печатьРешенияКтоКемБыл(Пассажиры):-
Пассажиры = [Первый|Остальные],
Первый = книголюб(Фамилия,Жанр,_),
write(tab,tab,Фамилия, " был ", Жанр,"ом"),nl,
печатьРешенияКтоКемБыл(Остальные).

% відповідь на питання: "Кто что читал?"
печатьРешенияКтоЧтоЧитал([]).
печатьРешенияКтоЧтоЧитал(Пассажиры):-
Пассажиры = [Первый|Остальные],
Первый = книголюб(Фамилия,_,СписокКниг),
write(tab,tab,Фамилия, " читал ", СписокКниг),nl,
печатьРешенияКтоЧтоЧитал(Остальные).

goal
% ВІДПОВІДІ НА ПИТАННЯ %
выводРешений().

<== предыдущая лекция | следующая лекция ==>
ОдинИз(Поэт,Пассажиры), | Маскарад
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 175; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.