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

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

10.01.2019, 09:01. Показов 3096. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru