Лабораторная работа. Головоломка №15
.docxМосковский государственный университет леса
Кафедра вычислительной техники
Лабораторная работа
по дисциплине: Интеллектуальные системы
Выполнил: студент гр. ВТМ-11
Соколов И.П.
Принял: ст. преподаватель
Лапашина В.В.
Москва
2013
Постановка задачи:
ЗАДАЧА №15.
Пользуясь методом «образовать и проверить», напишите PROLOG-программу для решения следующей головоломки:
Однажды на отдыхе за круглым столом оказались пятеро ребят родом из Москвы, Санкт-Петербурга, Новгорода, Перми и Томска: Юра, Толя, Алеша, Коля и Витя. Известно следующее:
1. Москвич сидел между томичом и Витей.
2. Санкт-петербуржец сидел между Юрой и Толей, а напротив него сидели пермяк и Алеша.
3. Коля никогда не был в Санкт-Петербурге, а Юра не бывал в Москве и Томске.
4. Томич с Толей регулярно переписываются.
Требуется определить, в каком городе живет каждый из ребят.
Решение:
%Zadanie #15
domains
name = string %имена ребят
city = string %города
guy = guy (name,city) %кто,откуда
guylist = guy* %список кто,откуда
predicates
puzzle %головоломка
structure(guylist) %структура
key(guylist) %ключи (условия)
solution(guylist) %решение
name(guy, name) %имя
city(guy, city) %город
member(guy, guylist) %принадлежность структуре
goal
puzzle.
clauses
structure([ %структура
guy("Yura",_),
guy("Tolya",_),
guy("Alesha",_),
guy("Kolya",_),
guy("Vitya",_)
]).
puzzle :- %головоломка
structure (Struct), %структура
key (Struct), %ключи
solution (Struct). %решение
key(Guys) :-
member (guy(_,"Moscow"), Guys),
member (guy(_,"Piter"), Guys),
member (guy(_,"Tomsk"), Guys),
member (guy(_,"Permy"), Guys),
member (guy(_,"Novgorod"), Guys),
member (Man3K1, Guys), %ключ №1
name (Man3K1, "Vitya"), %Витя
not (city (Man3K1, "Moscow")), %Витя не из Москвы
not (city (Man3K1, "Tomsk")), %Витя не из Томска
member (Man2K2, Guys), %ключ №2
member (Man3K2, Guys),
member (Man5K2, Guys),
name (Man2K2, "Yura"), %Юра
name (Man3K2, "Tolya"), %Толя
name (Man5K2, "Alesha"), %Алёша
not (city (Man2K2, "Piter")), %Юра не из Питера
not (city (Man3K2, "Piter")), %Толя не из Питера
not (city (Man5K2, "Piter")), %Алёша не из Питера
not (city (Man2K2, "Permy")), %Юра не из Перми
not (city (Man3K2, "Permy")), %Толя не из Перми
not (city (Man5K2, "Permy")), %Алёша не из Перми
member (Man1K3, Guys), %ключ №3
name (Man1K3, "Kolya"), %Коля
not (city (Man1K3, "Piter")), %Коля не из Питера
not (city (Man2K2, "Moscow")), %Юра не из Москвы
not (city (Man2K2, "Tomsk")), %Юра не из Томска
not (city (Man3K2, "Tomsk")). %ключ №4
%Толя не из Томска
solution(Guys) :- write(Guys).
name (guy(A,_),A).
city (guy(_,B),B).
member (X, [X|_]).
member (X, [_|H]) :- member (X,H).
Результат: