Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа. Головоломка №15

.docx
Скачиваний:
18
Добавлен:
17.04.2015
Размер:
22.46 Кб
Скачать

Московский государственный университет леса

Кафедра вычислительной техники

Лабораторная работа

по дисциплине: Интеллектуальные системы

Выполнил: студент гр. ВТМ-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).

Результат: