|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
||||||
Как реализовать полный проход по списку?28.02.2016, 11:14. Показов 2952. Ответов 14
Метки нет (Все метки)
Здравствуйте.
Использую AMZI Prolog. Есть несколько предикатов:
0
|
||||||
| 28.02.2016, 11:14 | |
|
Ответы с готовыми решениями:
14
Проход по списку с удаление элементов Рекурсивный проход по списку. Вложенность |
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
|
| 15.01.2019, 07:09 [ТС] | |
|
Как изменить предикат row так, чтобы он выдавал все возможные комбинации? Пробовал рекурсию, но не получилось.
0
|
|
|
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
|
|||
| 15.01.2019, 11:54 | |||
|
Кстати, почему AMZI Prolog? Нет, AMZI Prolog это серьезный подход, но все-таки... Добавлено через 35 минут Покажите...
0
|
|||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
||||||
| 15.01.2019, 13:00 [ТС] | ||||||
|
AMZI Prolog потому, что он интегрируется с Delphi.
?- row([c(c,1), c(c,2), c(c,3), c(h,1), c(d,1)], L). L = [c(c, 1), c(c, 2), c(c, 3)] ; no А должен быть ещё один вариант: [c(c, 1), c(h, 1), c(d, 1)]. Когда рекурсии нет то он выводится. Добавлено через 3 минуты Хотелось бы, чтобы проходился весь список.
0
|
||||||
|
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
|
||||||||
| 15.01.2019, 15:04 | ||||||||
|
Добавлено через 11 минут
0
|
||||||||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
|
| 16.01.2019, 00:54 [ТС] | |
|
А у меня почему- то выдало:
?- findall(L, row([c(c,1), c(c,2), c(c,3), c(h,1), c(d,1)], L), LL). L = H150 LL = [[c(c, 1), c(c, 2), c(c, 3)]] Добавлено через 1 минуту Для Delphi есть компонент, который есть на сайте AMZI Prolog. Добавлено через 34 минуты Виноват, забыл удалить рекурсию. ?- findall(L, row([c(c,1), c(c,2), c(c,3), c(h,1), c(d,1)], L), LL). L = H150 LL = [[c(c, 1), c(c, 2), c(c, 3)], [c(c, 1), c(h, 1), c(d, 1)]] Почему выдаётся неопределённый L?
0
|
|
|
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
|
||||||||
| 16.01.2019, 09:50 | ||||||||
Добавлено через 2 минуты Реально была настроена среда в выходом на работающее приложение?
0
|
||||||||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
|
| 17.01.2019, 05:00 [ТС] | |
|
Да, согласен. Сейчас столкнулся с проблемой разрядности, а может и не её. Пока разбираться надо.
А есть ли связь SWI-Prolog с другими языками?
0
|
|
|
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
|
||
| 17.01.2019, 10:21 | ||
|
А какой язык надо? Там все через Си, с вытекающими последствиями. Изучайте сайт, там все очень неплохо структурировано и добротный поиск. Для Delphi можно глянуть для примера https://github.com/GoldenSoftwareLtd/gedemin если не закрыли доступ ![]() gsPLClient.pas плюс PLIntf.pas и PLHeader.pas Правда это для версии SWI-Prolog 6.6.x Примерно, что там за тема можно глянуть Система логического программирования на встроенном SWI‑Prolog Если не лень, то лучше изучить документацию 12 Foreign Language Interface Мне понравилось Python - SWI-Prolog bridge и A Node.js interface to the SWI-Prolog communicating over stdio Для Node.js через потоки ввода-вывода, т.е. реализован сам принцип, и в Си лезть не надо
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
||||||
| 06.02.2019, 12:22 [ТС] | ||||||
|
Перевёл на EZY Prolog. С ним Delphi совместим спокойно, проверено. Но есть не понятный нюанс всё по тому же коду:
rogram Executed: [[c(c,1),c(c,2),c(c,3),c(c,4),c(c,5)],[c(c,1),c(h,1),c(d,1)]] 1 Solution(s) Почему не выводится: [[c(c,1),c(c,2),c(c,3),c(c,4),c(c,5)],[c(c,1),c(h,1),c(d,1)],[c(h,1),c(h,2), c(h,3)]] ?
0
|
||||||
|
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
|
|||||||
| 06.02.2019, 15:01 | |||||||
vibor, мне трудно вам помочь, потому что я очень плохо въезжаю, какой алгоритм тут реализован, зачем лезть в этот arg, это специфический метауровневый предикат, наверняка там все проще реализуется. То, что это игра в карты мало что проясняет, можете текстом написать...
0
|
|||||||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
|
| 07.02.2019, 12:40 [ТС] | |
|
Суть такова, раздаётся по десять карт. Следующая карта после раздачи кладётся рядом с оставшейся колоды. Как и в любой карточной игре нужно остаться без карт. Необходимо выложить карты следующим образом. Есть два варианта либо по масти, либо по стоимости. Выкладывать нужно по рядам, в каждом ряду не менее трёх карт. Ряды строятся следующим образом, например
по-масти: clubs, 1; clubs, 2; clubs, 3 и т.д., но без пропусков. Пропуск допустим только если есть жокер, тогда он кладётся вместо недостающей карты и в последствии его можно обменять на карту которой он объявлен. Причём если он например объявлен clubs, 4, то ни игрок, ни другие игроки не могут создать ряд с участием clubs, 4; по-стоимости clubs, 8; diamonds, 8; spades, 8. Понятно, что в таком ряду не может быть больше 4 карт, но и не менее 3. Ряды можно выкладывать если сумма стоимости всех карт не менее 33. Туз равен 1, остальные своей стоимости, Валет, Дама, Король -11, 12, 13 соответственно. Пока нет возможности выложить ряды нужно собирать следующим образом: либо из колоды, либо ту карту которую видно. Причем ход начинается с того, что нужно взять карту. После этого если можно, то выкладываете ряды и завершается после отдачи одной карты, которая кладётся рядом с колодой. Либо сверху на неё, либо вместо неё, если вы её перед этим забрали. После того, как вы выложили ряды, но ещё карты остались, то можно подкладывать карты в чужие ряды или обменивать жокера, если имеете его эквивалент. При постройке ряда по-стоимости наличие жокера объявляется создателем ряда. Если кто-то остался без карт, а у вас остались карты считается общая стоимость оставшихся карт на руках (ряды при этом не учитываются), при наличии жокера она удваивается. Чем меньше сумма тем соответственно лучше. Вот, вроде бы, все правила.
0
|
|
|
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
|
||
| 07.02.2019, 17:03 | ||
|
Но сходу, - тут точно не надо начинать с алгоритма подбора... Все как обычно, сначала описание входной спецификации, т.е. колода карт с определенным состояние каждой карты, структура должна учитывать все возможные ньансы, в колоде, у игрока, в каком ряду, для джокера чем он объявлен (структура единая, просто доп. параметр для джокера, кот. у других будет пуст ил что карту обменяли на джокера, хотя я бы все сделал отдельно). В структуре называть это все по-человечески clubs, diamonds, spades... joker, ace... короче как есть (не жадничайте )Пролог-программу может не так просто писать, но очень хорошо читать, если все называть нормально, ну насколько это можно... Потом и отладка будет проще, а отладки будет море )) И бросьте Вы пока эту затею с Delphi, сначала сделайте прототип на SWI-Prrolog, пусть и в текстовом режиме, мой Вам совет...Добавлено через 43 минуты Вот пример прототипа для крестики-нолики (пять-в-ряд максимум) xo_game Только запускайте в хроме или лисе, с оперой периодически swish не дружит Потом все это было реализовано, ну, почти на Delphi... Надо будет, я Вам скину и уже конечную реализацию в графике (ну почти) плюс небольшую презентацию без особых пояснений, только пишите в личку, а то порежет форум... Добавлено через 11 минут И да, крестики-нолики, это все лишь учебный пример (многое там не очень оптимизировано, именно в учебных целях), не надо там дербанить меня, что мол играют не супер, зато без дерева решений, только оценочная функция и эвристики...
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 20
|
|
| 09.02.2019, 06:58 [ТС] | |
|
Нет этой игры наверное нет, поэтому и решил её реализовать. Это была наша семейная игра. Пришла она от бабушки. Кто её научил не знаю.
Я пишу игру на Delphi. А на Prolog меня заинтересовала обработка списков. Я как раз только и думал функцию построения рядов реализовать на Prolog.
0
|
|
|
2 / 2 / 0
Регистрация: 23.06.2021
Сообщений: 6
|
|
| 24.06.2021, 02:48 | |
|
Всем привет.
Выложил EZY PROLOG на сеть - ezy-prolog com Исходники выложил на GITHUB spenkov/ezy-prolog
0
|
|
| 24.06.2021, 02:48 | |
|
Помогаю со студенческими работами здесь
15
Рекурсивный проход по списку символов Определить количество самых дешевых книг, используя 1 проход по списку
Как реализовать проход по структурам с помощью макросов va_list, va_arg? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|