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

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

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

Задание: расставить в ряд разноцветные многогранники. Условие: 1.Каждая фигра окрашена в один цвет. 2.Каждый многоугольник имеет равное или большее колличество граней в сравнении с предыдущим. 3.Последовательность размещения многоугольников в ряду должна соответствовать последовательности цветов радуги. Возможен пропуск 1-3 цветов. После достижения конца радужного спектра надо вернуться в его начало и продолжить расстановку многоугольников. При этом цвета не могут повторяться. Необходимо реализовать обработку неконкретизированной переменной. (Если в главном меню ввести неконкретизированную переменную, например 'sequence_creator(O,X).' - программа должна выводить: ?- sequence_creator(O,X). O = v1, X = [v1] . ) При вводе неконкретизированной переменной выводит false. Где ошибка и как правильно реализовать данную обработку? Вот код:
Листинг программы
  1. %?Polyhedron(?Name, ?Radius, ?Color)
  2. polyhedrons_db:-
  3. recorded(polyhedron, (_,_,_)),!.
  4. polyhedrons_db:-
  5. recordz(polyhedron, (p5,9,deepSkyBlue)), % 1
  6. recordz(polyhedron, (p4,11,green)), %
  7. recordz(polyhedron, (p3,11,yellow)),%
  8. recordz(polyhedron, (p6,17,blue)), % 2
  9. recordz(polyhedron, (p7,18,violet)), % 3
  10. recordz(polyhedron, (p8,19,red)), % 4
  11. recordz(polyhedron, (p9,100,orange)), % 5
  12. %?Color, ?NextColor
  13. rainbow(red, orange).
  14. rainbow(orange, yellow).
  15. rainbow(yellow, green).
  16. rainbow(green, deepSkyBlue).
  17. rainbow(deepSkyBlue, blue).
  18. rainbow(blue, violet).
  19. rainbow(violet,red).
  20. rainbow(red, orange).
  21. %?FirstPolyhedron? -MultiPolyhedron
  22. sequence_creator(R1, [R1|Rs]):-
  23. polyhedrons_db,
  24. nonvar(R1),
  25. recorded(polyhedron, f(R1, R, C)),
  26. sequence_generator(R, C, Rs, [C]).
  27. %?FirstPolyhedron? -MultiPolyhedron
  28. sequence_creator(R1, [R1|Rs]):-
  29. polyhedrons_db,
  30. var(R1),
  31. first_polyhedron(R1,R,C),
  32. sequence_generator(R, C, [],[]).
  33.  
  34. %+Radius,+Color,-MultiPolyhedron
  35. sequence_generator(R, C, [Polyhedron|Polyhedrons], Colors):-
  36. next_color(C, C1),
  37. recorded(polyhedron, (Polyhedron, R1, C1)),
  38. not(member(C1, Colors)),
  39. R1 >= R,!,
  40. sequence_generator(R1, C1, Polyhedrons, [C1|Colors]).
  41. %+Radius,+Color,-MultiPolyhedron
  42. sequence_generator(_, C, [], []):-
  43. \+((next_color(C,C1),recorded(polyhedron, (_,_,C1)))).
  44. sequence_generator(_, _, [], _).
  45.  
  46. %?Color, ?NextColor
  47. next_color(C, C1):-
  48. rainbow(C, C1).
  49. next_color(C,C1):-
  50. rainbow(C,Cp),
  51. rainbow(Cp, C1).
  52. next_color(C, C1):-
  53. rainbow(C, Cp),
  54. rainbow(Cp, Cp1),
  55. rainbow(Cp1, C1).
  56. next_color(C,C1):-
  57. rainbow(C,Cp),
  58. rainbow(Cp, Cp1),
  59. rainbow(Cp1, Cp2),
  60. rainbow(Cp2, C1).
  61.  
  62. %-FirstRing, -Number, -Color
  63. first_polyhedron(Polyhedron, R, C):-
  64. recorded(polyhedron,(Polyhedron,R,C)),
  65. \+(next_color(C,_)).

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

textual
Листинг программы
  1. sequence_creator(R1, [R1]):-
  2. polyhedrons_db,
  3. var(R1),
  4. first_polyhedron(R1,R,C),
  5. sequence_generator(R, C, [],[]).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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