Головоломка про инструменты и языки - Prolog
Формулировка задачи:
Маша, Лида, Женя и Катя играют на разных инструментах – виолончели, рояли, гитаре, скрипке, но каждая только на одном. Они же владеют иностранными языками – английским, французским, немецким, испанским, но каждая одним. Девушка, играющая на гитаре, говорит по-испански. Ни Лида, ни Маша не играют на скрипке и на виолончели, не знают английского языка. Девушка, которая говорит по-немецки, не играет на виолончели. Женя знает французский язык, но не играет на скрипке. Кто играет на каком инструменте и каким иностранным языком владеет?
Слишком сложно это даётся. Искал решение своей проблемы, но всё равно не могу понять почему не работает.
Может ли кто-нибудь помочь и объяснить в чём собственно проблема?
Листинг программы
- domains
- names = string
- stuffs = string
- langs = string
- structure = know(names,stuffs,langs)
- list = structure*
- predicates
- nondeterm stuff(string)
- nondeterm lang(string)
- nondeterm held(list)
- have(structure, list)
- clauses
- stuff("viol").
- stuff("royal").
- stuff("guitar").
- stuff("skripka").
- lang("eng").
- lang("fr").
- lang("nem").
- lang("isp").
- held([know("Masha",MS,ML),know("Jenya",JS,"fr"),know("Lida",LS,LL),know("Katya",KS,KL)]):-
- stuff(MS),MS<>"skripka",MS<>"viol",lang(ML),ML<>"eng",ML<>"fr",
- stuff(JS),JS<>MS,JS<>"skripka",
- stuff(LS),LS<>MS,LS<>JS,LS<>"skripka",LS<>"viol",lang(LL),LL<>"eng",LL<>"fr",LL<>ML,
- stuff(KS),KS<>JS,KS<>LS,KS<>MS,lang(KL),KL<>MS,KL<>LL,KL<>"fr",
- have(know(D,"guitar","isp"),[know("Masha",MS,ML),know("Jenya",JS,"fr"),know("Lida",LS,LL),know("Katya",KS,KL)]).
- have(Element,[Element|_]):-!.
- have(Element,[_|Spisok]):-held(Element,Spisok).
- goal
- held(List).
Решение задачи: «Головоломка про инструменты и языки»
textual
Листинг программы
- KL\=ML
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д