Логическая задача Prolog - Prolog

  1. Помогите, пожалуйста, решить логическую задачу. Болельщики футбольных команд делали прогнозы об итогах соревнований «Турнир четырех»: — Я уверен, что Спартак будет чемпионом, а ЦСКА займет последнее место — сказал Иван. — Что ты, Спартак выше третьего не поднимется, а ЦСКА станет вторым — возразил Сергей. — Чемпионом будет Динамо, а ЦСКА войдет в тройку сильнейших — сделал свой прогноз Петр. — Динамо будет вторым, а вот Ротор точно будет последним — промолвил Алексей. Выяснилось, что каждый из болельщиков был прав в одном прогнозе и ошибся во втором. Как распределились места, занятые командами? Проблема в том, что нужно и учесть условие "каждый из болельщиков был прав в одном прогнозе и ошибся во втором" и установить между названием команды-местом взаимнооднозначное соответствие. Добавлял объекты для обозначения различных болельщиков, чтобы условие учесть, но тогда соответствия нет, и выводятся лишние варианты. В итоге додумался только сгруппировать в утверждениях условия для каждой команды, но это, очевидно, просто перебор всех вариантов с такими условиями:


textual

Код к задаче: «Логическая задача Prolog - Prolog»

PREDICATES
nondeterm соответствие(symbol, string, string, integer, integer)
nondeterm название(string)
nondeterm место(integer)
nondeterm решение(string, string, string, string, integer, integer, integer, integer)
 
CLAUSES
название("Спартак").
название("ЦСКА").
название("Динамо").
название("Ротор").
 
место(1).
место(2).
место(3).
место(4).
 
соответствие(a, X1, X2, Y1, Y2) :- название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", 
                   место(Y1), Y1 = 1, место(Y2), Y2 <> 4;
                   название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", 
                   место(Y1), Y1 <> 1, место(Y2), Y2 = 4.
                   
соответствие(b, X1, X2, Y1, Y2) :- название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", 
                   место(Y1), Y1 <> 1, Y1 <> 2, место(Y2), Y2 <> 2;
                   название(X1), X1 = "Спартак", название(X2), X2 = "ЦСКА", 
                   место(Y1), Y1 <> 3, Y1 <> 4, место(Y2), Y2 = 2.
                   
соответствие(c, X3, X2, Y3, Y2) :- название(X3), X3 = "Динамо", название(X2), X2 = "ЦСКА",
                   место(Y3), Y3 = 1, место(Y2), Y2 = 4;
                   название(X3), X3 = "Динамо", название(X2), X2 = "ЦСКА", 
                   место(Y3), Y3 <> 1, место(Y2), Y2 <> 4.
                   
соответствие(d, X3, X4, Y3, Y4) :- название(X3), X3 = "Динамо", название(X4), X4 = "Ротор",
                   место(Y3), Y3 = 2, место(Y4), Y4 <> 4;
                   название(X3), X3 = "Динамо", название(X4), X4 = "Ротор", 
                   место(Y3), Y3 <> 2, место(Y4), Y4 = 4.
 
решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4) :- X2 = "ЦСКА", X1 = "Спартак", X3 = "Динамо", X4 = "Ротор", 
                       соответствие(a, X1, X2, Y1, Y2), соответствие(b, X1, X2, Y1, Y2),
                       соответствие(c, X3, X2, Y3, Y2), соответствие(d, X3, X4, Y3, Y4),
                       Y1 <> Y2, Y1 <> Y3, Y1 <> Y4, Y2 <> Y3, Y2 <> Y4, Y3 <> Y4.
GOAL
решение(X1, X2, X3, X4, Y1, Y2, Y3, Y4).

СДЕЛАЙТЕ РЕПОСТ

5   голосов, оценка 3.600 из 5



Похожие ответы
  1. Здравствуйте. Есть задача: Однажды в Артеке за круглым столом оказалось пятеро ребят родом из Москвы, Санкт-Петербурга, Новгорода, Перми и Томска: Юра, Толя, Алеша, Коля и Витя. Москвич сидел между томичем и Витей, санкт-петербуржец - между Юрой и Толей, а напротив него сидели пермяк и Алеша. Коля никогда не был в Санкт-Петербурге, а Юра не бывал в Москве и Томске, а томич с Толей регулярно переписываются. Определите, в каком городе живет каждый из ребят. Есть решение с использованием списков:

  1. Добрый день! Есть условие задачи: "На столе лежат в ряд четыре фигуры: треугольник, ромб, круг и квадрат. Квадрат, круг, ромб и треугольник вырезаны из белой, синей, красной и зеленой бумаги. Известно, что: круг не белый и не зеленый; синяя фигура лежит между ромбом и красной фигурой; треуголь- ник не синий и не зеленый; квадрат лежит между треугольником и белой фигурой. Из бумаги какого цвета вырезан ромб?" Установил ограничения согласно условиям, но при выполнении

  1. Выполните задание в среде Prolog В базе имеются факты: Анна – родитель Аси, Анна – родитель Романа Антон – родитель Аси, Антон – родитель Романа Рита – родитель Игоря, Олег – родитель Игоря Антон – брат Риты Какие правила необходимо ввести, чтобы, не пополняя базу фактами, ответить на следующие вопросы: 1. Является ли Роман племянником Риты? 2. Кто племянники Риты? 3. У Антона – мужской пол?

  1. Выполните задание в среде Prolog Имеется информация о том, что спортсмены Игорь, Роман, Антон, Виктор, Николай имеют соответственно возраст и рост: 18 и 189, 17 и 182, 20 и 191, 21 и 185, 16 и 193. Необходимо: а) выбрать всех спортсменов выше 184 (включительно), но не выше 190; б) выбрать спортсменов моложе 20 лет, но не моложе 18 (включительно); в) выбрать всех спортсменов с ростом не ниже 186 и не старше 19 лет (включительно). помогите пожалуйста

  1. Доброе время суток! Задача: На столе лежат в четыре ряда фигуры: треугольник, ромб, круг и квадрат. Цвета этих фигур - зеленый, желтый, синий, красный. Фигура красного цвета лежит между зеленой и синей (возможно, не рядом), справа от желтой фигуры лежит ромб, круг лежит правее треугольника и ромба, причем треугольник лежит не с краю и, наконец, фигура синего цвета не лежит рядом с фигурой желтого цвета. Определить, какого цвета круг. Наработка:

  1. Привет всем! Никак неполучается решить задачу. дано: камни с весом и несколько рюкзаков с максимальной вместимостью. нужно: как можно вместить камни в рюкзаки, с условием, что нелзя вмещять больше чем N камней в каждый рюкзак. спасибо!

  1. База данных содержит факты вида ученик(имя, класс) и увлекается(имя, хобби). Необходимо составить программу, которая подбирает одному из учеников указанного класса, увлекающемуся футболом, пару из других классов и вывести все возможные пары.

  1. Подскажите, пожалуйста, как можно решить эту задачу? База данных содержит факты вида: товар(наименование, количество, цена), промышленные(наименование), продукты(наименование). Составить правило товар_прод(наименование, количество, цена) для вывода информации о продуктовых товарах.

  1. Взял код для своей задачи отсюда Три бидона – 16л, 8л и 5л (спасибо Грымзик) Попытался приспособить для своей задачи - не выходит. Переполняется стёк: