Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
%% houses(-Solution) % @param Solution is a list of houses that satisfy all constraints. % @author Folklore attributes this puzzle to Einstein % @see http://en.wikipedia.org/wiki/Zebra_Puzzle /* Adopted by Pierre for puzzle provided by Marijke */ /* Houses logical puzzle: who owns the zebra and who drinks water? Vijf gekleurde huizen op een rij, elk met een andere eigenaar, andere nationaliteit, huisdier, merk cigaretten, en een drankje. 1) De Brit woont in het rode huis 2) De Zweed houdt honden als huisdier 3) De Deen drinkt thee 4) De Duitser rookt Prince 5) De eigenaar van het groene huis drinkt koffie 6) De eigenaar van het gele huis rookt Dunhill 7) De man die in het middelste huis woont, drinkt melk 8) De persoon die Pall Mall rookt, kweekt vogels 9) De man die Blends rookt, woont naast degene die katten houdt 10) De Noor woont naast het blauwe huis 11) De man die Blue Master rookt, drinkt bier 12) De man die Blends rookt, heeft een buurman die water drinkt 13) Het groene huis ligt naast het witte huis, aan de linkerkant 14) De Noor woont in het eerste huis 15) De man die paarden houdt woont naast de man die Dunhill rookt. Wie heeft er vissen in huis? */ % Render de huizen in een nette tabel. :- use_rendering(table, [header(h('Nationaliteit', 'Huisdier', 'Rookt', 'Drinkt', 'Kleur'))]). vis_eigenaar(Nationaliteit) :- huizen(Hs), member(h(Nationaliteit,vis,_,_,_), Hs). water_drinker(Drinkt) :- huizen(Hs), member(h(Drinkt,_,_,water,_), Hs). huizen(Hs) :- % elk huis in de huizenlijst Hs wordt weergegeven als: % h(Naionaliteit, Huisdier, Rookt, Drinkt, Kleur) length(Hs, 5), member(h(brit,_,_,_,rood), Hs), % 1 member(h(zweed,honden,_,_,_), Hs), % 2 member(h(deen,_,_,thee,_), Hs), % 3 member(h(duitser,_,prince,_,_), Hs), % 4 member(h(_,_,_,koffie,groen), Hs), % 5 member(h(_,_,dunhill,_,geel), Hs), % 6 Hs = [_,_,h(_,_,_,melk,_),_,_], % 7 member(h(_,vogels,pallmall,_,_), Hs), % 8 next(h(_,katten,_,_,_),h(_,_,blends,_,_), Hs), % 9 next(h(noor,_,_,_,_),h(_,_,_,_,blauw), Hs), % 10 member(h(_,_,bluemaster,bier,_), Hs), % 11 next(h(_,_,_,water,_),h(_,_,blends,_,_), Hs), % 12 next(h(_,_,_,_,wit),h(_,_,_,_,groen), Hs), % 13 Hs = [h(noor,_,_,_,_)|_], % 14 next(h(_,paarden,_,_,_),h(_,_,dunhill,_,_), Hs), % 15 member(h(_,_,_,water,_), Hs), % een van hen drinkt water member(h(_,vis,_,_,_), Hs). % een van hen heeft een vis next(A, B, Ls) :- append(_, [A,B|_], Ls). next(A, B, Ls) :- append(_, [B,A|_], Ls). /** <voorbeelden> ?- vis_eigenaar(Nationaliteit). ?- water_drinker(Drinkt). ?- huizen(Huizen). */