0 / 0 / 0
Регистрация: 19.06.2017
Сообщений: 1
1

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

19.06.2017, 05:35. Показов 595. Ответов 1

Author24 — интернет-сервис помощи студентам
Задание: расставить в ряд разноцветные многогранники.
Условие:
1.Каждая фигра окрашена в один цвет.
2.Каждый многоугольник имеет равное или большее колличество граней в сравнении с предыдущим.
3.Последовательность размещения многоугольников в ряду должна соответствовать последовательности цветов радуги. Возможен пропуск 1-3 цветов. После достижения конца радужного спектра надо вернуться в его начало и продолжить расстановку многоугольников. При этом цвета не могут повторяться.

Необходимо реализовать обработку неконкретизированной переменной.
(Если в главном меню ввести неконкретизированную переменную, например 'sequence_creator(O,X).' - программа должна выводить:
?- sequence_creator(O,X).
O = v1,
X = [v1] . )

При вводе неконкретизированной переменной выводит false.
Где ошибка и как правильно реализовать данную обработку?

Вот код:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
%?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,_)).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2017, 05:35
Ответы с готовыми решениями:

[SWI-Prolog] Умножение двух многочленов от одной переменной
Здравстуйте, подскажите пожалуйста по задачке: надо создать программу умножающая два многочлена от...

В чем ошибка? SWI-prolog. Undefined procedure...
Одним из примеров использования предиката name/2 может служить генерация новых атомов для...

Как переделать программу написанную на Turbo-Prolog в SWI-Prolog?
Ребята подскажите пожалуйста как переделать эту программу написанную на Turbo-Prolog в SWI-Prolog?...

В Turbo-Prolog есть возможность описать Goal. Как это реализовано в SWI-Prolog
Здравствуйте. в Turbo-Prolog есть возможность описать Goal: Goal father(X,_), write(X). И...

1
794 / 598 / 156
Регистрация: 07.10.2013
Сообщений: 1,327
20.06.2017, 09:54 2
Цитата Сообщение от Artur132 Посмотреть сообщение
Где ошибка
В логике кода ошибка и есть, - first_polyhedron(R1,R,C) не находит ни одного решения и выдает false.
Цитата Сообщение от Artur132 Посмотреть сообщение
и как правильно реализовать данную обработку?
Ну, вы же алгоритм реализовывали, пройдите в отладчике...
Цитата Сообщение от Artur132 Посмотреть сообщение
Prolog
1
2
3
4
5
sequence_creator(R1, [R1|Rs]):-
polyhedrons_db,
var(R1),
first_polyhedron(R1,R,C),
sequence_generator(R, C, [],[]).
должен быть
Prolog
1
2
3
4
5
sequence_creator(R1, [R1]):-
polyhedrons_db,
var(R1),
first_polyhedron(R1,R,C),
sequence_generator(R, C, [],[]).
но это уже мелочи.
0
20.06.2017, 09:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2017, 09:54
Помогаю со студенческими работами здесь

Перевод программы из Turbo Prolog в SWI-Prolog
Здравствуйте! У меня есть программа по определению внука Петра III, она написана на Turbo Prolog....

Изменить значение переменной при обработке событий bind
Добрый день! Недавно начал свое знакомство с tkinter и дошел до bind() и собственно событий, при...

SWI Prolog
Скажите пожалуйста как работать в SWI Prolog...я работал на турбопролог, вот например есть там...

Swi Prolog
Ребята помогите решить задания по SWI Prolog: 1.В списке символов S1, S2, ..., Sn найти длину...

SWI Prolog
Здравствуйте! Помоги пожалуйста с реализацией 4 запроса ( 4. Какого цвета фрукты, которые любят...

SWI-Prolog + Qt
Доброй ночи. Срочно нужна помощь. Есть небольшой проект на с++ в Qt, благодаря которому можно в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru