Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
NCof
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 8
1

Логическая задача на SWI Prolog

25.09.2017, 11:31. Просмотров 344. Ответов 1
Метки нет (Все метки)

Задали решить логическую задачу посредством языка пролог, лог задачи:

На столе лежат в ряд четыре фигуры: треугольник, ромб, круг и квадрат. Квадрат, круг, ромб и треугольник вырезаны из белой, синей, красной и зеленой бумаги. Известно, что: круг не белый и не зеленый; синяя фигура лежит между ромбом и красной фигурой; треугольник не синий и не зеленый; квадрат лежит между треугольником и белой фигурой. Из бумаги какого цвета вырезан ромб?

Вышла такая программа:

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
nomer(1).
nomer(2).
nomer(3).
nomer(4).
figura(treugolnik).
figura(romb).
figura(krug).
figura(kvadrat).
bumaga(belaya).
bumaga(sinyaya).
bumaga(krasnaya).
bumaga(zelenaya).
solve(Table):-
Table = [table(X, XFigura, XBumaga), table(Y, YFigura, YBumaga), table(W, WFigura, WBumaga), table(Z, ZFigura, ZBumaga)],
nomer(X), nomer(Y), nomer(W), nomer(Z), unique([X, Y, W, Z]),
figura(XFigura), figura(YFigura), figura(WFigura), figura(ZFigura), unique[(XFigura, YFigura, WFigura, ZFigura)],
bumaga(XBumaga), bumaga(YBumaga), bumaga(WBumaga), bumaga(ZBumaga), unique[(XBumaga, YBumaga, WBumaga, ZBumaga)],
% круг не белый и не зеленый
not(member(table(_, krug, belaya), Table)),
not(member(table(_, krug, zelenaya), Table)),
% синяя фигура между ромбом и красной фигурой
nextto([_, _, sinyaya], [_, romb, _], Table),
nextto([_, _, krasnaya], [_, _, sinyaya], Table),
% треугольник не зеленый и не синий
not(member(table(_, treugolnik, sinyaya), Table)),
not(member(table(_, treugolnik, zelenaya), Table)),
% квадрат между треугольником и белой фигурой
nextto([_, kvadrat, _], [_, treugolnik, _], Table),
nextto([_, _, belaya, _], [_, kvadrat, _], Table).
Но я не знаю, как составить запрос, и будет ли он работать, выручайте, форумчанцы!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2017, 11:31
Ответы с готовыми решениями:

Логическая задача swi prolog
База данных содержит факты вида ученик(имя, класс) и увлекается(имя, хобби)....

SWI Prolog. Логическая задача. Талисманы месяцев
По древнему поверью, у каждого месяца есть свой камень-талисман. Так, июню,...

Логическая задачка в SWI Prolog
На заводе работали три друга: слесарь, токарь и сварщик. Их фамилии Борисов,...

Логическая задача на Turbo prolog или Gui prolog
Может у кого есть исходни на Prolog ЗЫ заранее спаисбо)

Задача SWI prolog
Подскажите, пожалуйста, как можно решить эту задачу? База данных содержит...

1
Black Fregat
2628 / 1362 / 375
Регистрация: 31.05.2009
Сообщений: 5,161
01.10.2017, 01:28 2
1) Зачем номера тоже распределять случайным образом? Только наплодите лишних решений, отличающихся лишь перестановкой элементов в Table.
2) Часть предикатов, которые Вы используете, тоже нужно описать, например nextto
3) В 15 строке вызов unique написан правильно, а в 16 и 17 неправильный порядок скобок
4) Вы уж определитесь, как хранить данные. Почти везде у Вас в списке структуры table, а при вызове nextto вдруг откуда-то возникают списки.

А запрос составить примерно так:
Prolog
1
2
3
solve(Table),
member(table(_, romb, RombColor), Table),
write(RombColor).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2017, 01:28

Задача на Swi-Prolog
Здравствуйте. В общем появилась проблема. Никогда не изучал пролог. И вот дали...

Списки в SWI-Prolog. Задача
Добрый день! Помогите, пожалуйста, решить задачу на SWI-Prolog. Задание:...

Задача со списками (SWI-Prolog)
Доброго времени суток, Есть 2 задачи на списки: 1. Разделить список на две...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru