Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 19.06.2017
Сообщений: 1

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

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

Студворк — интернет-сервис помощи студентам
Задание: расставить в ряд разноцветные многогранники.
Условие:
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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2017, 05:35
Ответы с готовыми решениями:

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

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

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

1
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
20.06.2017, 09:54
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.06.2017, 09:54
Помогаю со студенческими работами здесь

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

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

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

Программа для Turbo Prolog не работает в SWI Prolog
Скажите пожалуйста как работать в SWI Prolog...я работал на турбопролог, вот например есть там решенная задачка: PREDICATES ...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru