Задача на логику (разноцветные фигуры). Ошибка - Prolog

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Задача на логику (разноцветные фигуры). Ошибка»

textual
Листинг программы
/*
круг не белый и не зеленый;
синяя фигура лежит между ромбом и красной фигурой;
треугольник не синий и не зеленый;
квадрат лежит между треугольником и белой фигурой
*/
фигура:-
фигура(Решение), вывод_табл(Решение).
фигура(Реш) :-
Реш = [[1,N1,C1],[2,N2,C2],[3,N3,C3],[4,N4,C4]],
перестановка([круг,квадрат,ромб,треугольник],[N1,N2,N3,N4]),
перестановка([красный,синий,белый,зеленый],[C1,C2,C3,C4]),
%перестановка([круг,квадрат,ромб,треугольник],[N1,N2,N3,N4]),
%перестановка([синий,зеленый,белый,красный],[C1,C2,C3,C4]),
 
not(member([_,круг,белый],Реш)),
not(member([_,круг,зеленый],Реш)),
 
%not(member([_,ромб,синий],Реш)),
%not(member([_,ромб,красный],Реш)),
 
not(member([_,треугольник,синий],Реш)),
not(member([_,треугольник,зеленый],Реш)),
%not(member([_,треугольник,белый],Реш)),
 
%not(member([_,квадрат,белый],Реш)),
 
 
member([СФ,_,синий],Реш), member([РБ,ромб,_],Реш), member([КФ,_,красный],Реш),
(СФ < РБ, СФ > КФ ; СФ > РБ, СФ < КФ),
 
member([КВ,квадрат,_],Реш), member([ТК,треугольник,_],Реш), member([БЛ,_,белый],Реш),
(КВ < ТК, КВ > БЛ ; КВ > ТК, КВ < БЛ).
 
перестановка([],[]).
перестановка([X|L],P):-перестановка(L,L1),вставить(X,L1,P).
вставить(X,L1,L2):-удалить(X,L2,L1).
удалить(X,[X|T],T).
удалить(X,[Н|T],[Н|T1]):-удалить(X,T,T1).
 
вывод_табл([A,B,C]) :-
    Н=['N','Фигура','Цвет'],
write('+--+------------+----------+'),nl,
writef('|%2L|%12L|%10L|',Н),nl,
write('+--+------------+----------+'),nl,
writef('|%2L|%12L|%10L|',A),nl,
writef('|%2L|%12L|%10L|',B),nl,
writef('|%2L|%12L|%10L|',C),nl,
write('+--+------------+----------+'),nl.

Объяснение кода листинга программы

  1. В данной программе описывается решение логической задачи о разноцветных фигурах.
  2. Переменные решения задачи: Реш, СФ, КФ, РБ, БЛ, КВ, ТК, Н.
  3. Перестановка используется для перебора всех возможных комбинаций цветов фигур.
  4. Условие задачи описывает, какие цвета не могут быть у фигур.
  5. Четыре фигуры (круг, квадрат, ромб, треугольник) должны быть раскрашены в четыре цвета (красный, синий, зеленый, белый) таким образом, чтобы выполняться условиям задачи.
  6. Для каждой фигуры задается условие Фигура не может быть ...
  7. Программа перебирает все возможные комбинации цветов фигур и проверяет их на соответствие условиям задачи.
  8. Если найден вариант раскраски фигур, удовлетворяющий условиям задачи, он выводится на экран в виде таблицы.
  9. Если не найдено ни одного варианта раскраски фигур, удовлетворяющего условиям задачи, выводится сообщение об ошибке.

Оцени полезность:

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