Constraint Logic Programming: Ученики организовали экскурсию в горы
Программирование › Помощь с решением задач на Prolog › Решение головоломок на Prolog › Constraint Logic Programming: Ученики организовали экскурсию в горы
Помечено: логическая задача
В этой теме 1 ответ, 2 участника, последнее обновление 4 года/лет назад.
- АвторСообщения
- 29.01.2015 в 00:55 #1858@questioner
Помогите решить логическую задачу:
Ученики из одного класса, одной школы организовали экскурсию в горы, куда пригласили и родителей. 3 автобуса в общей сумме 89 персонами(отцы, матери, преподаватели, вместе с учениками (девушками и юношами)). Из которых женщин на 7 персон больше чем мужчин, детей на 45 больше чем женщин. Сколько женщин, сколько мужчин, сколько детей поехало на экскурсию.
Вручную я решила, но надо заставить Prolog решать мою задачу.
- 29.01.2015 в 01:16 #1859@admin
Не знаю что хочет преподаватель, но я думаю что правильное решение должно использовать технику логического вывода в ограничениях (Constraint Logic Programming). Такое расширение машины логического вывода используется, например, для решения систем уравнений — это очень удобно. Вне пролога существуют специальные языки, производящие вычисления в ограничениях, но внутри пролога все обычно реализуется в рамках библиотеки.
В SWI Prolog библиотека Constraint Logic Programming называется clpr. Ограничения в SWI записываются внутри фигурных скобок. Подключаете и записываете ваше выражение.
Решение задачи и пример использования Constraint Logic Programming:
:-[library(clpr)]. решение(Женщин, Мужчин, Детей):- {Женщин = Мужчин + 7}, {Детей = Женщин + 45}, {Женщин + Мужчин + Детей = 89}.
Ограничение задается в фигурных скобках, оно может содержать переменные и знаки сравнения.?- решение(Женщин, Мужчин, Детей). Женщин = 17.0, Мужчин = 10.0, Детей = 62.0.
Есть несколько вариантов реализации логического программирования в ограничениях:- clpr, выполняет поиск решения в дробных (Reals) числах;
- clpq, ищет решение в рациональных числах;
- clpb, программирование в ограничениях над логическими (Boolean) переменными;
- clpfd, решает задачу над переменными целого типа, принимающими значения в заданном диапазоне
Это очень мощные механизмы, в каждой библиотеке содержится множество вспомогательных функций и синтаксических конструкций.
- АвторСообщения
Для ответа в этой теме необходимо авторизоваться.