SWI-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. Ошибка при обработке неконкретизированной переменной»
textual
Листинг программы
- sequence_creator(R1, [R1]):-
- polyhedrons_db,
- var(R1),
- first_polyhedron(R1,R,C),
- sequence_generator(R, C, [],[]).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д