SWI-Prolog. Ошибка при обработке неконкретизированной переменной - Prolog

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

Задание: расставить в ряд разноцветные многогранники. Условие: 1.Каждая фигра окрашена в один цвет. 2.Каждый многоугольник имеет равное или большее колличество граней в сравнении с предыдущим. 3.Последовательность размещения многоугольников в ряду должна соответствовать последовательности цветов радуги. Возможен пропуск 1-3 цветов. После достижения конца радужного спектра надо вернуться в его начало и продолжить расстановку многоугольников. При этом цвета не могут повторяться. Необходимо реализовать обработку неконкретизированной переменной. (Если в главном меню ввести неконкретизированную переменную, например 'sequence_creator(O,X).' - программа должна выводить: ?- sequence_creator(O,X). O = v1, X = [v1] . ) При вводе неконкретизированной переменной выводит false. Где ошибка и как правильно реализовать данную обработку? Вот код:
%?Polyhedron(?Name, ?Radius, ?Color)
polyhedrons_db:-
recorded(polyhedron, (_,_,_)),!.
polyhedrons_db:-
recordz(polyhedron, (p5,9,deepSkyBlue)), % 1
recordz(polyhedron, (p4,11,green)), %
recordz(polyhedron, (p3,11,yellow)),%
recordz(polyhedron, (p6,17,blue)), % 2
recordz(polyhedron, (p7,18,violet)), % 3
recordz(polyhedron, (p8,19,red)), % 4
recordz(polyhedron, (p9,100,orange)), % 5
 
%?Color, ?NextColor
rainbow(red, orange).
rainbow(orange, yellow).
rainbow(yellow, green).
rainbow(green, deepSkyBlue).
rainbow(deepSkyBlue, blue).
rainbow(blue, violet).
rainbow(violet,red).
rainbow(red, orange).
 
%?FirstPolyhedron? -MultiPolyhedron
sequence_creator(R1, [R1|Rs]):-
polyhedrons_db,
nonvar(R1),
recorded(polyhedron, f(R1, R, C)),
sequence_generator(R, C, Rs, [C]).
 
%?FirstPolyhedron? -MultiPolyhedron
sequence_creator(R1, [R1|Rs]):-
polyhedrons_db,
var(R1),
first_polyhedron(R1,R,C),
sequence_generator(R, C, [],[]).
 
 
 
%+Radius,+Color,-MultiPolyhedron
sequence_generator(R, C, [Polyhedron|Polyhedrons], Colors):-
next_color(C, C1),
recorded(polyhedron, (Polyhedron, R1, C1)),
not(member(C1, Colors)),
R1 >= R,!,
sequence_generator(R1, C1, Polyhedrons, [C1|Colors]).
 
%+Radius,+Color,-MultiPolyhedron
sequence_generator(_, C, [], []):-
\+((next_color(C,C1),recorded(polyhedron, (_,_,C1)))).
 
sequence_generator(_, _, [], _).
 
 
%?Color, ?NextColor
next_color(C, C1):-
rainbow(C, C1).
next_color(C,C1):-
rainbow(C,Cp),
rainbow(Cp, C1).
next_color(C, C1):-
rainbow(C, Cp),
rainbow(Cp, Cp1),
rainbow(Cp1, C1).
next_color(C,C1):-
rainbow(C,Cp),
rainbow(Cp, Cp1),
rainbow(Cp1, Cp2),
rainbow(Cp2, C1).
 
 
%-FirstRing, -Number, -Color
first_polyhedron(Polyhedron, R, C):-
recorded(polyhedron,(Polyhedron,R,C)),
\+(next_color(C,_)).

Код к задаче: «SWI-Prolog. Ошибка при обработке неконкретизированной переменной - Prolog»

textual
sequence_creator(R1, [R1]):-
polyhedrons_db,
var(R1),
first_polyhedron(R1,R,C),
sequence_generator(R, C, [],[]).

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


СОХРАНИТЬ ССЫЛКУ