Логическая задача - Prolog (227078)
Формулировка задачи:
Помогите, пожалуйста дописать решение задачи:
Браун, Гриффит, Клеменс и Грин -четверо студентов университетов разных стран встретились на международном фестивале молодёжи и студентов. Один из них – канадец, второй – американец, третий – англичанин, четвёртый – австралиец. Браун и Клеменс были на концерте, в котором принимал участие англичанин. Гриффит и австралиец пели дуэтом под аккомпанемент американца. Австралиец пригласил к себе в гости Грина и собирается пригласить Брауна. Браун за время фестиваля так и не познакомился с Клеменсом. Определите национальности студентов.
Большую часть решения я написал, мне осталось записать последнее предложение: Браун за время фестиваля так и не познакомился с Клеменсом. Я не могу понять как его связать с остальными.
Листинг программы
- domains
- студент = студент(string Имя,string Национальность)
- студенты = студент*
- sts = string*
- имя = string национальность=string
- predicates
- решение(студенты)
- принадл(string,sts)
- принадл(студент,студенты)
- знаком(имя ,национальность)
- clauses
- знаком("Браун","англичанин").
- знаком("Клеменс","англичанин").
- знаком("Гриффит","австралиец").
- знаком("Гриффит","американец").
- знаком("Грин","австралиец").
- знаком("Браун","австралиец").
- решение(Студенты):- Национальности=["англичанин","австралиец","американец","канадец"],
- принадл(НациональностьБрауна, Национальности),
- принадл(НациональностьКлеменса, Национальности),НациональностьКлеменса<>НациональностьБрауна,
- принадл(НациональностьГриффита, Национальности),НациональностьГриффита<>НациональностьБрауна,НациональностьГриффита<>НациональностьКлеменса,
- принадл(НациональностьГрина, Национальности),НациональностьГрина<>НациональностьБрауна,НациональностьГрина<>НациональностьКлеменса,НациональностьГрина<>НациональностьГриффита,
- Студенты = [студент("Браун",НациональностьБрауна),студент("Клеменс",НациональностьКлеменса),студент("Гриффит",НациональностьГриффита),студент("Грин",НациональностьГрина)],
- принадл(студент(Браун,НациональностьБрауна),Студенты), not(знаком(Браун,НациональностьБрауна)),
- принадл(студент(Клеменс,НациональностьКлеменса),Студенты), Браун<>Клеменс,not(знаком(Клеменс,НациональностьКлеменса)),
- принадл(студент(Гриффит,НациональностьГриффита),Студенты), Гриффит<>Клеменс,Гриффит<>Браун,not(знаком(Гриффит,НациональностьГриффита)),
- принадл(студент(Грин,НациональностьГрина),Студенты), Грин<>Клеменс,Грин<>Браун,Грин<>Гриффит,not(знаком(Грин,НациональностьГрина)).
- принадл(Эл,[Эл|_]).
- принадл(Эл,[_|Список]):- принадл(Эл,Список).
- goal
- решение(Студенты).
Решение задачи: «Логическая задача»
textual
Листинг программы
- nations(Mens, Nations):-
- Mens = [braun, griff, klem, grin],
- Nations = [Braun, Griff, Klem, Grin],
- permutation([can, amer, angl, avstr], Nations),
- Braun \= angl, Klem \= angl, % 1
- Griff \= avstr, Griff \= amer, % 2
- Grin \= avstr, Braun \= avstr, % 3
- Meets = [Griff, avstr, amer], % 4
- not( member(Braun, Meets) ). % 5
Объяснение кода листинга программы
- Создается список
Mens
с четырьмя элементами:braun
,griff
,klem
,grin
. - Создается список
Nations
с четырьмя элементами:Braun
,Griff
,Klem
,Grin
. - Выполняется операция перестановки, в результате которой список
Nations
принимает значение[can, amer, angl, avstr]
. - Проверяется, что элемент
Braun
не равенangl
, а элементKlem
не равенangl
. - Проверяется, что элемент
Griff
не равенavstr
и не равенamer
. - Проверяется, что элемент
Grin
не равенavstr
и не равенbraun
. - Создается список
Meets
с тремя элементами:Griff
,avstr
,amer
. - Проверяется, что элемент
Braun
не является членом спискаMeets
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д