В поездке пятеро друзей — Антон, Борис, Вадим, Дима и Гриша, знакомились с попутчицей - Prolog
Формулировка задачи:
Уважаемые, прошу помощи в решении задачи на Прологе))
В поездке пятеро друзей — Антон, Борис, Вадим, Дима и Гриша, знакомились с попутчицей. Они предложили ей отгадать их фамилии, причём каждый из них высказал одно истинное и одно ложное утверждение:
Дима сказал: "Моя фамилия — Мишин, а фамилия Бориса — Хохлов". Антон сказал: "Мишин — это моя фамилия, а фамилия Вадима — Белкин". Борис сказал: "Фамилия Вадима — Тихонов, а моя фамилия — Мишин". Вадим сказал: "Моя фамилия — Белкин, а фамилия Гриши — Чехов". Гриша сказал: "Да, моя фамилия Чехов, а фамилия Антона — Тихонов".
Какую фамилию носит каждый из друзей?
Заранее ОГРОМНОЕ СПАСИБО за оказанную помощь!!!
Решение задачи: «В поездке пятеро друзей — Антон, Борис, Вадим, Дима и Гриша, знакомились с попутчицей»
textual
Листинг программы
% В поездке пятеро друзей — Антон, Борис, Вадим, Дима и Гриша, знакомились с попутчицей. friends(['Антон', 'Борис', 'Вадим', 'Дима', 'Гриша']). sirnames(['Мишин', 'Хохлов', 'Белкин', 'Тихонов', 'Чехов']). % Они предложили ей отгадать их фамилии, % причём каждый из них высказал одно истинное и одно ложное утверждение: % Дима сказал: "Моя фамилия — Мишин, а фамилия Бориса — Хохлов". approve('Дима', 'Дима', 'Мишин'). % 2 - Дима не Мишин (1) approve('Дима', 'Борис', 'Хохлов'). % 1 + больше про Хохлова ничего, значит Борис % Антон сказал: "Мишин — это моя фамилия, а фамилия Вадима — Белкин". approve('Антон', 'Антон', 'Мишин'). % 3 + может Антон Мишин approve('Антон', 'Вадим', 'Белкин'). % 4 - тогда Вадим не Белкин % Борис сказал: "Фамилия Вадима — Тихонов, а моя фамилия — Мишин". approve('Борис', 'Вадим', 'Тихонов'). % 5 + может Вадим Тихонов approve('Борис', 'Борис', 'Мишин'). % 6 - Мишин уже был Антоном (3) % Вадим сказал: "Моя фамилия — Белкин, а фамилия Гриши — Чехов". approve('Вадим', 'Вадим', 'Белкин'). % 7 - ещё раз Вадим не Белкин (4) approve('Вадим', 'Гриша', 'Чехов'). % 8 + может Гриша Чехов % Гриша сказал: "Да, моя фамилия Чехов, а фамилия Антона — Тихонов". approve('Гриша', 'Гриша', 'Чехов'). % 9 + точно Гриша Чехов (8) approve('Гриша', 'Антон', 'Тихонов'). % 10 - Тихонов был раньше Вадимом (5) % Какую фамилию носит каждый из друзей? about_friends(List) :- friends(Friends), sirnames(Sirnames), give_sirname(Friends, Sirnames, List), check_rules(Friends, List). % раздать фамилии give_sirname([], [], []). give_sirname(Friends, Sirnames, [[Friend, Sirname] | Rest]) :- select1(Friend, Friends, Friends1), select1(Sirname, Sirnames, Sirnames1), give_sirname(Friends1, Sirnames1, Rest). % проверить правила check_rules([], _). check_rules([Friend | Friends], List) :- approve(Friend, Name, Sirname), member1([Name, Sirname], List), approve(Friend, Name1, Sirname1), not( member1([Name1, Sirname1], List) ), check_rules(Friends, List). % принадлежность member1(X,[X|_]). member1(X,[_|T]):- member1(X,T). % выбор с удалением select1(X, [X|Tail], Tail). select1(Elem, [Head|Tail], [Head|Rest]) :- select1(Elem, Tail, Rest).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д