Na podstawie przedstawionych faktów:
1. Jest pięć domów.
2. Anglik mieszka w czerwonym domu.
3. Hiszpan ma psa.
4. Kawę pija się w zielonym domu.
5. Ukraińczyk pije herbatę.
6. Zielony dom stoi zaraz na prawo od domu w kolorze kości słoniowej.
7. Palacz papierosów "Gold Old" hoduje ślimaki.
8. Papierosy "Kools" pali się w zółtym domu.
9. Mleko pija się w środkowym domu.
10. Norweg mieszka w pierwszym domu.
11. Osoba paląca "Chesterfieldy" żyje w domu, obok osoby, hodującej lisa.
12. "Kools"-y pali się w domu zaraz obok tego, w którym hoduje się konie.
13. Palacze "Lucky Strike" piją sok pomarańczowy.
14. Japończyk pali "Parliments".
15. Norweg żyje obok niebieskiego domu.
Należy odpowiedzieć na pytanie:
Kto pije wodę?
Kto hoduje zebrę?
:- op(100,xfy,na).
Dom na Ulicy :- member(Dom,Ulicy).
na_prawo(Prawy,Lewy,[Lewy,Prawy | _]).
na_prawo(Prawy,Lewy,[_|Reszta]) :- na_prawo(Prawy,Lewy,Reszta).
obok(X,Y,Lista) :- na_prawo(X,Y,Lista).
obok(X,Y,Lista) :- na_prawo(Y,X,Lista).
fakty(Ulicy) :-
Ulicy = [_, _, _, _, _],
dom(czerwony, anglik, _, _, _) na Ulicy,
dom(_, hiszpan, pies, _, _) na Ulicy,
dom(zielony, _, _, kawa, _) na Ulicy,
dom(_, ukrainczyk, _, herbata, _) na Ulicy,
na_prawo(dom(zielony,_,_,_,_), dom(kosc_sloniowa,_,_,_,_), Ulicy),
dom(_, _, slimaki, _, old_gold) na Ulicy,
dom(zolty, _, _, _, kools) na Ulicy,
[_, _, dom(_, _, _, mleko, _), _, _] = Ulicy,
[dom(_, norweg, _, _, _) | _] = Ulicy,
obok(dom(_, _, _, _, chesterfieldy), dom(_, _, lis, _, _), Ulicy),
obok(dom(_, _, _, _, kools), dom(_, _, kon, _, _), Ulicy),
dom(_, _, _, sok, lucky_strike) na Ulicy,
dom(_, japonczyk, _, _, parliaments) na Ulicy,
obok(dom(_, norweg, _, _, _), dom(niebieski, _, _, _, _), Ulicy).
hoduje_zebre(Ktos,Ulicy) :-
fakty(Ulicy),
dom(_,Ktos,zebra,_,_) na Ulicy.
hoduje_zebre(Ktos) :- hoduje_zebre(Ktos,_).
pije_wode(Ktos,Ulicy) :-
fakty(Ulicy),
dom(_,Ktos,_,woda,_) na Ulicy.
pije_wode(Ktos) :- pije_wode(Ktos,_).