Логическая задача "Венецианский купец" - Prolog

Узнай цену своей работы

Формулировка задачи:

В универе дали задачку. У героини комедии Шекспира «Венецианский купец» Порции было три шкатулки из золота, серебра и свинца. В одной из шкатулок хранился портрет Порции. На крышках каждой шкатулки были сделаны надписи: - на золотой: «Портрет в этой шкатулке»; - на серебряной: «Портрет не в этой шкатулке»; - на свинцовой: «Портрет не в золотой шкатулке». Порция объяснила, что среди этих высказываний истинно только одно. Решение знаю - портрет в серебряной, а истина на свинцовой. Не могу написать код на прологе. Вот, что я набыдлокодил:
Среда GNU Prolog, если что. Помогите, пожалуйста.

Решение задачи: «Логическая задача "Венецианский купец"»

textual
Листинг программы
m(gold).
m(silver).
m(lead).
 
p(gold, X) :- X = gold.
p(silver, X) :- X \= silver.
p(lead, X) :- X \= gold.
 
test(X) :-
    findall(Y, p(Y, X), L),
    length(L, 1).
    
solve(X):-
    m(X),
    test(X).

Объяснение кода листинга программы

  1. m(gold) - утверждает, что есть золото.
  2. m(silver) - утверждает, что есть серебро.
  3. m(lead) - утверждает, что есть свинец.
  4. p(gold, X) :- X = gold - устанавливает, что если речь идет о золоте, то значение переменной X равно gold.
  5. p(silver, X) :- X \= silver - устанавливает, что если речь идет о серебре, то значение переменной X не равно silver.
  6. p(lead, X) :- X \= gold - устанавливает, что если речь идет о свинце, то значение переменной X не равно gold.
  7. test(X) :- findall(Y, p(Y, X), L), length(L, 1) - находит все значения переменной X, которые удовлетворяют правилам и выводит их в виде списка. Длина списка должна быть равна 1.
  8. solve(X) :- m(X), test(X) - находит значения переменной X, которые удовлетворяют правилам и выводит их.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5