С Новым годом! Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20

Список структур

10.01.2019, 09:01. Показов 3088. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой предикат:
Prolog
1
2
suit(_, [], []).
suit(X, [H|T], [X|T1]):-suit(X, T, T1).
Если список из простых элементов, то работает нормально. Но у меня список структур типа: c(S,_), S=c; s; d; h; j. А второй параметр не имеет значения, но должен выводится в результате то есть:
Prolog
1
2
3
suit(c(s,_), [c(s,3), c(s,2), c(d,3), c(s,1)], L).
 
?- L= [c(s,3), c(s,2), c(s,1)]
Как этого добиться?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2019, 09:01
Ответы с готовыми решениями:

Список структур!
Сформировать список структур. Из исходного списка сформировать новый список структур (в соответствии с вариантом задания) и вывести его...

программа которая берет список и создает список другой из этого же списка + тот же список без последнего элемента
надо написать программу которая берет список и создает список другой из этого же списка + тот же список без последнего элемента к...

Заменить массив структур на односвязный список, и на двусвязный список
Взять текст задания и заменить массив структур на односвязный список, и на двусвязный список using namespace std; class person { ...

6
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
10.01.2019, 09:49
Лучший ответ Сообщение было отмечено vibor как решение

Решение

Цитата Сообщение от vibor Посмотреть сообщение
Как этого добиться?
Так и добиться, - работать со структурой.
Но, дело в том, что Ваш предикат не работает, как указано в тесте.
Ваш предикат просто создает список выходных значений из входного элемента длинной первого списка
Prolog
1
2
?- suit(c(s,_), [c(s,3), c(s,2), c(d,3), c(s,1)], L).
L = [c(s, _G485), c(s, _G485), c(s, _G485), c(s, _G485)]
Видимо надо так
Prolog
1
2
3
4
5
6
suit(_, [], []).
suit(c(X,_), [c(X,N)|T], [c(X,N)|T1]):-
    !,
    suit(c(X,_), T, T1).
suit(X, [_|T], T1):-
    suit(X, T, T1).
Prolog
1
2
3
?- suit(c(s,_), [c(s,3), c(s,2), c(d,3), c(s,1)], L).
L = [c(s, 3), c(s, 2), c(s, 1)] ;
false.
Или наглядней и так
Prolog
1
2
3
4
5
6
7
8
suit(_, [], []).
suit(X, [H|T], [H|T1]):-
    X = c(S,_),
    H = c(S,_),
    !,
    suit(X, T, T1).
suit(X, [_|T], T1):-
    suit(X, T, T1).
Prolog
1
2
3
?- suit(c(s,_), [c(s,3), c(s,2), c(d,3), c(s,1)], L).
L = [c(s, 3), c(s, 2), c(s, 1)] ;
false.
1
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
10.01.2019, 11:46  [ТС]
С предикатом suit всё нормально, большое спасибо. Но создал по его аналогии предикат value:
Prolog
1
2
3
4
5
6
7
8
value(_, [], []).
value(X, [H|T], [H|T1]):-
    X = c(_,V),
    H = c(_,V),
    !,
    value(X, T, T1).
value(X, [_|T], T1):-
    value(X, T, T1).
но он выдал не то, что я ожидал:
Prolog
1
2
3
4
5
?- value(3, [c(s,1), c(d,3), c(s,3), c(h,3)], L).
 
L = '[]' 
 
yes
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
10.01.2019, 11:54
Лучший ответ Сообщение было отмечено vibor как решение

Решение

Цитата Сообщение от vibor Посмотреть сообщение
но он выдал не то, что я ожидал
Просто надо внимательней, - работаем со структурой
Prolog
1
2
3
?- value(c(_,3), [c(s,1), c(d,3), c(s,3), c(h,3)], L).
L = [c(d, 3), c(s, 3), c(h, 3)] ;
false.
Так требовалось?
0
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
10.01.2019, 13:04  [ТС]
Да, большое спасибо. Я не внимательно ввёл запрос.
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
10.01.2019, 14:40
Надо отдать должное Вашему преподавателю, по-моему подобной задачи на форуме не было.
И рекурсия и понимание обработки структур в Прологе, - маленькая, но достойная задача.
Ошибочка похоже познаете Пролог самостоятельно.
0
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
12.01.2019, 13:30  [ТС]
Да, самостоятельно. Хочу на нём написать логику карточной игры.
Стал дальше думать и снова напоролся на грабли по моей логике должно срабатывать, но Пролог отказывается:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
row_s(L, L1, L2, L3, L4):-
    suit(c(c,_), L, L11),
    length(L11, N1),
    N1>=3,
    sort(L11, L1),
    suit(c(d,_), L, L22),
    length(L22, N2),
    N2>=3,
    sort(L22, L2),
    suit(c(h,_), L, L33),
    length(L33, N3),
    N3>=3,
    sort(L33, L3),
    suit(c(s,_), L, L44),
    length(L44, N4),
    N4>=3,
    sort(L44, L4).
Ответ выдан:
?- row_s([c(d,1), c(d,3), c(s,8), c(h,1), c(h,2), c(h,3), c(h,4), c(d,3), c(d,2), c(h,8)], L1, L2, L3, L4).
no
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2019, 13:30
Помогаю со студенческими работами здесь

Список структур
Доброго времени суток Создаю список, элементами которого является структура. public struct Dano { public string...

Список структур данных
Имеется вот такое задание: Описать, используя структуру данных запись, школьный класс (Фамилия и инициалы, дата рождения, месяц рождения,...

Двусвязный список структур
Написал программу,а она не запускается. И ошибок не выдает. Подскажите пожайлуста что не так сделал. Разработать программу для...

Двусвязный список из структур
Ребят, помогите, а то не могу пример откопилировать... typedef struct tag_lib { //задается таблица с данными в...

Прочитать список структур
Здравствуйте. Имеется две структуры struct structure { std::string album; std::string singer; int date;


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru