% Structure of the family: % % Christine --- Heinz Maria --- Fritz % / \ | % / \ | % Monika --- Herbert Angelika --- Hubert % / \ | % / \ | % Susanne Norbert Andreas % Definition der Ehefrau-Ehemann-Relation: ehemann(christine, heinz). ehemann(maria, fritz). ehemann(monika, herbert). ehemann(angelika, hubert). % Definition der Kind-Mutter-Relation: mutter(herbert, christine). mutter(angelika,christine). mutter(hubert, maria). mutter(susanne, monika). mutter(norbert, monika). mutter(andreas, angelika). % Definition der Kind-Vater-Relation: %vater(norbert,herbert) :- mutter(norbert,monika), ehemann(monika,herbert). %vater(norbert,herbert) :- mutter(norbert,maria), ehemann(maria,herbert). vater(Kind,Vater) :- mutter(Kind,Mutter), ehemann(Mutter,Vater). grossvater(E,G) :- vater(E,V), vater(V,G). grossvater(E,G) :- mutter(E,M), vater(M,G). istEhemann(P) :- ehemann(_,P). % Aufsammeln von Loesungen: muetter(Ms) :- findall(M,mutter(_,M),Ms). grossvaeter(Gs) :- findall(G,grossvater(_,G),Gs). kind_muetter(Ms) :- findall((K,M),mutter(K,M),Ms). enkel_grossvaeter(Gs) :- findall((E,G),grossvater(E,G),Gs). %kinder(M,Ks) :- findall(K,mutter(K,M),Ks). kinder(M,Ks) :- bagof(K,mutter(K,M),Ks). istVater(V) :- vater(_,V). %vaeter(Vs) :- bagof(V,istVater(V),Vs). %vaeter(Vs) :- bagof(V, K^vater(K,V), Vs). vaeter(Vs) :- setof(V, K^vater(K,V), Vs).