Логическая задача "Венецианский купец" - Prolog
Формулировка задачи:
В универе дали задачку.
У героини комедии Шекспира «Венецианский купец» Порции было три шкатулки из золота, серебра и свинца. В одной из шкатулок хранился портрет Порции. На крышках каждой шкатулки были сделаны надписи:
- на золотой: «Портрет в этой шкатулке»;
- на серебряной: «Портрет не в этой шкатулке»;
- на свинцовой: «Портрет не в золотой шкатулке».
Порция объяснила, что среди этих высказываний истинно только одно.
Решение знаю - портрет в серебряной, а истина на свинцовой. Не могу написать код на прологе. Вот, что я набыдлокодил:
Среда GNU Prolog, если что.
Помогите, пожалуйста.
Листинг программы
- m(gold).
- m(silver).
- m(lead).
- in_gold(gold).
- not_in_silver(silver).
- not_in_gold(lead).
- solve(g, s, l):-
- m(g),
- m(s), s <> g,
- m(l), l <> s, l <> g,
- in_gold(g), not(not_in_silver(s)), not(not_in_gold(l));
- not(in_gold(g)), not_in_silver(s), not(not_in_gold(l));
- not(in_gold(g)), not(not_in_silver(s)), not_in_gold(l).
Решение задачи: «Логическая задача "Венецианский купец"»
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).
Объяснение кода листинга программы
m(gold)
- утверждает, что есть золото.m(silver)
- утверждает, что есть серебро.m(lead)
- утверждает, что есть свинец.p(gold, X) :- X = gold
- устанавливает, что если речь идет о золоте, то значение переменной X равно gold.p(silver, X) :- X \= silver
- устанавливает, что если речь идет о серебре, то значение переменной X не равно silver.p(lead, X) :- X \= gold
- устанавливает, что если речь идет о свинце, то значение переменной X не равно gold.test(X) :- findall(Y, p(Y, X), L), length(L, 1)
- находит все значения переменной X, которые удовлетворяют правилам и выводит их в виде списка. Длина списка должна быть равна 1.solve(X) :- m(X), test(X)
- находит значения переменной X, которые удовлетворяют правилам и выводит их.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д