Constraint Logic Programming: Ученики организовали экскурсию в горы

      Комментарии к записи Constraint Logic Programming: Ученики организовали экскурсию в горы отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Решение головоломок на Prolog Constraint Logic Programming: Ученики организовали экскурсию в горы

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 3 мес. назад.

  • Автор
    Сообщения
  • #1858

    questioner
    Участник

    Помогите решить логическую задачу:

    Ученики из одного класса, одной школы организовали экскурсию в горы, куда пригласили и родителей. 3 автобуса в общей сумме 89 персонами(отцы, матери, преподаватели, вместе с учениками (девушками и юношами)). Из которых женщин на 7 персон больше чем мужчин, детей на 45 больше чем женщин. Сколько женщин, сколько мужчин, сколько детей поехало на экскурсию.

    Вручную я решила, но надо заставить Prolog решать мою задачу.

  • #1859

    Не знаю что хочет преподаватель, но я думаю что правильное решение должно использовать технику логического вывода в ограничениях (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, решает задачу над переменными целого типа, принимающими значения в заданном диапазоне

    Это очень мощные механизмы, в каждой библиотеке содержится множество вспомогательных функций и синтаксических конструкций.

Для ответа в этой теме необходимо авторизоваться.