Turbo Prolog. Логическая задач про путевки

В этой теме 1 ответ, 2 участника, последнее обновление 5 дн., 2 час. назад.

  • Автор
    Сообщения
  • #5483
    @user1202190

    Помогите пожалуйста решить следующую задачу

    Три семейные пары — пара1, пара2 и пара3 купили путевки за 2000 $, 3000 $ и 5000 $ в Турцию, Италию и Испанию. пара1 поехала не в Турцию, пара2 — не в Италию. Те, кто уехал в Турцию, не платили за путевку 5000 $. Те, кто уехал в Италию, заплатили 3000 $. пара2 не платила за путевку 2000 $. Определить: какая пара в какой стране отдыхала и сколько заплатила за путевку?

  • #5485
    @admin

    Описываем типы данных:

    domains
      пара = пара1; пара2; пара3
      цена = ц2000; ц3000; ц5000
      страна = турция; италия; испания
      пары = пара*
      цены = цена*
      структура_гипотезы = путевка(пара, цена, страна)
      гипотеза = структура_гипотезы*

    То есть предполагать будем кто куда поехал для трех (списка) пар. Чтобы генерировать все варианты определим списки:

    constants
      все_пары = [пара1, пара2, пара3]
      все_цены = [ц2000, ц3000, ц5000]
      все_страны = [турция, италия, испания]

    Теперь можно генерировать, для этого используем предикат входит_в, эквивалентный предикату member из swi prolog.

    генерация_гипотезы(Гипотеза):-
      входит_в(ЦенаА, все_цены),
      входит_в(ЦенаБ, все_цены),
      входит_в(ЦенаВ, все_цены),
      
      входит_в(СтранаА, все_страны),
      входит_в(СтранаБ, все_страны),
      входит_в(СтранаВ, все_страны),
    
      Гипотеза = [
        путевка(пара1, ЦенаА, СтранаА),
        путевка(пара2, ЦенаБ, СтранаБ),
        путевка(пара3, ЦенаВ, СтранаВ)
      ].

    Можно запустить генерацию и увидеть что перебираются все возможные варианты путевок:

    goal
      генерация_гипотезы(Гипотеза)

    Однако, нам нужны не все варианты, известно ведь что они все получили разные путевки. Проверить это можно слегка изменив генерацию с помощью предиката без_повторов:

    ВсеСтраны = [СтранаА, СтранаБ, СтранаВ],
    без_повторов(ВсеСтраны),
    
    ВсеЦены = [ЦенаА, ЦенаБ, ЦенаВ],
    без_повторов(ВсеЦены),

    Есть мысли что делать дальше?

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