5 ludzi różnych narodowości zamieszkuje 5 domów w 5 różnych kolorach. Wszyscy palą papierosy 5 różnych marek i piją 5 różnych napojów. Hodują zwierzęta 5 różnych gatunków. Oto co wiemy.

  • Norweg zamieszkuje pierwszy dom.
  • Anglik mieszka w czerwonym domu.
  • Zielony dom znajduje się bezpośrednio po lewej stronie domu białego.
  • Duńczyk pija herbatkę.
  • Palacz papierosów light mieszka obok hodowcy kotów.
  • Mieszkaniec żółtego domu pali cygara.
  • Niemiec pali fajkę.
  • Mieszkaniec środkowego domu pija mleko.
  • Palacz papierosów light ma sąsiada, który pija wodę.
  • Palacz papierosów bez filtra hoduje ptaki.
  • Szwed hoduje psy.
  • Norweg mieszka obok niebieskiego domu.
  • Hodowca koni mieszka obok żółtego domu.
  • Palacz mentolowych pija piwo.
  • W zielonym domu pija się kawę.

Kto hoduje rybki?

% Rozwiązanie zagadki Einsteina w języku Prolog
% (kolor, narodowość, zwierzęta, napój, papierosy)

:- op(100, xfy, na).
Dom na Ulica :- member(Dom, Ulica).

po_prawej(Lewy, Prawy, [Lewy | [Prawy | _]]).
po_prawej(Lewy, Prawy, [_ | Reszta]) :- po_prawej(Lewy, Prawy, Reszta).

obok(X, Y, Lista) :- po_prawej(X, Y, Lista).
obok(X, Y, Lista) :- po_prawej(Y, X, Lista).

fakty(Ulica) :-
  Ulica = [_, _, _, _, _],
  [dom(_, norweg, _, _, _) | _] = Ulica,
  dom(czerwony, anglik, _, _, _) na Ulica,
  po_prawej(dom(zielony, _, _, _, _), dom(bialy, _, _, _, _), Ulica),
  dom(_, dunczyk, _, herbata, _) na Ulica,
  obok(dom(_, _, _, _, lekkie), dom(_, _, koty, _, _), Ulica),
  dom(zolty, _, _, _, cygara) na Ulica,
  dom(_, niemiec, _, _, fajka) na Ulica,
  [_, _, dom(_, _, _, mleko, _), _, _] = Ulica,
  obok(dom(_, _, _, _, lekkie), dom(_, _, _, woda, _), Ulica),
  dom(_, _, ptaki, _, bez_filtra) na Ulica,
  dom(_, szwed, psy, _, _) na Ulica,
  obok(dom(_, norweg, _, _, _), dom(niebieski, _, _, _, _), Ulica),
  obok(dom(_, _, konie, _, _), dom(zolty, _, _, _, _), Ulica),
  dom(_, _, _, piwo, mentolowe) na Ulica,
  dom(zielony, _, _, kawa, _) na Ulica.

hoduje_rybki(Kto, Ulica) :-
  fakty(Ulica),
  dom(_, Kto, rybki, _, _) na Ulica.

hoduje_rybki(Kto) :- hoduje_rybki(Kto, _).