Логическая задача: Все сладкоежки любят лакомиться пирожными и Конфетами.

      Комментарии к записи Логическая задача: Все сладкоежки любят лакомиться пирожными и Конфетами. отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Решение головоломок на Prolog Логическая задача: Все сладкоежки любят лакомиться пирожными и Конфетами.

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

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

    questioner
    Участник

    Помогите, пожалуйста с задачей на swi prolog. Нужно получить все ответы.

    Все сладкоежки любят лакомиться пирожными и Конфетами. Трюфели- конфета. Эклер — пирожное. Некоторые сладкоежки толстые. Таня — сладкоежка. Кто и чем любит лакомиться?

    любит(кто_то,сладости).
    сладости(конфета).
    сладости(трюфель).
    толстый(кто_то).
     
    не_сладкоежка(X):-
      любит(X,Y), not(сладости(Y)).
    сладкоежка(X):-
      любит(X,Y), not(не_сладкоежка(X)).
     
    % Как задать правила про толстых?

  • #1865

    Тебе не нужны правила про толстых — это лишние данные в задаче (или задачу не до конца переписал).
    Стоит вопрос «Кто и чем любит лакомиться?», т.е. нужно установить соответствие между людьми и продуктами.

    Для начала надо более четко классифицировать объекты, с которыми придется работать в задаче:

    вид(конфета, трюфель).
    вид(пирожное, эклер).
     
    сладкоежка('Таня').

    В задачи фигурируют более общие виды продуктов, такие как «пирожные», которыми могут быть не только эклеры, хотя в условии задачи других пирожных нет. Без этих усложнений задача тривиальна, я думаю что они нужны тут.
    В задаче есть информация о том, какие виды продуктов любят сладкоежки, занесем это в базу:

    сладкоежка_любит(пирожное).
    сладкоежка_любит(конфета).

    Осталось определить функции. Если есть сладкоежки, то есть и другие, которые любят те продукты, которые не едят сладкоежки:

    не_сладкоежка(X):- 
      сладкоежка(X), !, fail;!.
     
    любит(X, Y):- 
      сладкоежка(X), !, сладкоежка_любит(Type), вид(Type, Y);
      не_сладкоежка(X), !, не_сладкоежка_любит(Type), вид(Type, Y).

    Если мы сейчас спросим у машины логического вывода «кто что любит» — получим информацию лишь про Таню и эклеры, но можно добавить в задачу другие виды продуктов и других людей.

    ?- любит(Кто, Что).
    Кто = 'Таня',
    Что = эклер ;
    Кто = 'Таня',
    Что = трюфель.

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