Witam,
Mam takie zadanie do rozwiązania w Prologu:
Sześciu mężczyzn o różnych imionach (Andrzej, Dariusz, Mateusz, Michał, Tomasz, Wojciech)
jest żonatych z kobietami o różnych imionach (Agnieszka, Ewa, Róża, Ania, Alicja,
Ola)1 oraz posiada sześć różnych samochodów (BMW, Fiat, Ford, Mercedes, Opel, Renault)
w sześciu różnych kolorach (biały, czerwony, granat, zielony, żółty, szary). Każdy
pracuje w innym miejscu pracy (bank, hotel, politechnika, restauracja, sąd, szpital) i ma
inne hobby(czytanie, fotografia, majsterkowanie, pływanie, rowery, żeglarstwo).
Wiedząc, że
• Agnieszka i Andrzej są małżeństwem.
• Ola ma czerwony samochód.
• Fiat jest zielony.
• Właściciel Opla pracuje w restauracji.
• Pracownik politechniki lubi czytanie.
• Wojciech pływa w wolnych chwilach.
• Właściciel granatowego Forda lubi fotografować.
• Tomasz jest właścicielem BMW.
• Mąż Ewy lubi żeglarstwo.
• Dariusz ma biały samochód.
• Mąż Róży posiada Mercedesa.
• Właściciel szarego auta pracuje w sądzie.
• Po lewej stronie pracownika banku mieszka właściciel fiata, a po prawej pasjonat
kolarstwa.
• Po lewej stronie pracownika hotelu mieszka właściciel granatowego samochodu, a
z drugiej strony pracownik szpitala.
• Michał mieszka na prawo od Ani, a na lewo od niej mieszka Mateusz.
• Sąsiadem Alicji od lewej strony jest właściciel żółtego auta, a jego sąsiadem od
lewej strony jest znany majsterkowicz.
odpowiedz na pytania
• Kto pracuje w szpitalu?
• Jaki Kolor ma Renault?
Udało mi się napisać coś takiego:
% Sprawdzenie, czy element Lewo znajduje się na lewo od elementu Prawo w liście.
na_lewo(Lewy,Prawy,[Lewy,Prawy|_]).
na_lewo(Lewy,Prawy,[_|Ogon]) :- na_lewo(Lewy,Prawy,Ogon).
% Sprawdzenie, czy elementy X i Y znajdują się obok siebie w liście Domy.
obok(X,Y,Domy) :- na_lewo(X,Y,Domy).
obok(X,Y,Domy) :- na_lewo(Y,X,Domy).
% Rozwiązanie zagadki.
rozwiazanie(Szukany) :-
%Sześciu mężczyzn o różnych imionach (Andrzej, Dariusz, Mateusz, Michał, Tomasz, Wojciech)
%jest żonatych z kobietami o różnych imionach (Agnieszka, Ewa, Róża, Ania, Alicja,
%Ola) oraz posiada sześć różnych samochodów (BMW, Fiat, Ford, Mercedes, Opel, Renault)
%w sześciu różnych kolorach (biały, czerwony, granat, zielony, żółty, szary). Każdy
%pracuje w innym miejscu pracy (bank, hotel, politechnika, restauracja, sąd, szpital) i ma
%inne hobby(czytanie, fotografia, majsterkowanie, pływanie, rowery, żeglarstwo).
% [imiemezczyzny,imiekobiety,samochod,kolorsamochodu,praca,hobby].
Domy = [[1,_,_,_,_,_,_],[2,_,_,_,_,_,_],[3,_,_,_,_,_,_],[4,_,_,_,_,_,_],[5,_,_,_,_,_,_],[6,_,_,_,_,_,_]].
% Agnieszka i Andrzej są małżeństwem.
member([_,andrzej,agnieszka,_,_,_,_],Domy).
% Ola ma czerwony samochód.
member([_,_,ola,_,czerwony,_,_],Domy).
% Fiat jest zielony.
member([_,_,_,fiat,zielony,_,_],Domy).
% Właściciel Opla pracuje w restauracji.
member([_,_,_,opel,_,restauracja,_],Domy).
% Pracownik politechniki lubi czytanie.
member([_,_,_,_,_,politechnika,czytanie],Domy).
% Wojciech pływa w wolnych chwilach.
member([_,wojciech,_,_,_,_,plywanie],Domy).
% Właściciel granatowego Forda lubi fotografować
member([_,_,_,ford,granatowy,_,fotografowanie],Domy).
% Tomasz jest właścicielem BMW.
member([_,tomasz,_,bmw,_,_,_],Domy).
% Mąż Ewy lubi żeglarstwo
member([_,_,ewa,_,_,_,zeglarstwo],Domy).
% Dariusz ma biały samochód.
member([_,dariusz,_,_,bialy,_,_],Domy).
% Mąż Róży posiada Mercedesa
member([_,_,roza,mercedes,_,_,_],Domy).
% Właściciel szarego auta pracuje w sądzie.
member([_,_,_,_,szary,sad,_],Domy).
% Po lewej stronie pracownika banku mieszka właściciel fiata,
% a po prawej pasjonat kolarstwa.
na_lewo([_,_,_,_,_,bank,_],[_,_,_,fiat,_,_,_],Domy).
na_lewo([_,_,_,_,_,_,rowery],[_,_,_,_,_,bank,_],Domy).
% Po lewej stronie pracownika hotelu mieszka właściciel granatowego samochodu,
% a z drugiej strony pracownik szpitala
na_lewo([_,_,_,_,_,hotel,_],[_,_,_,_,granatowy,_,_],Domy).
na_lewo([_,_,_,_,_,szpital,_],[_,_,_,_,_,hotel,_],Domy).
% Michał mieszka na prawo od Ani,
% a na lewo od niej mieszka Mateusz
na_lewo([_,michal,_,_,_,_,_],[_,_,ania,_,_,_,_],Domy).
na_lewo([_,_,ania,_,_,_,_],[_,mateusz,_,_,_,_,_],Domy).
% Sąsiadem Alicji od lewej strony jest właściciel żółtego auta,
% a jego sąsiadem od lewej strony jest znany majsterkowicz.
obok([_,_,alicja,_,_,_,_],[_,_,_,_,zolty,_,_],Domy).
obok([_,_,_,_,zolty,_,_],[_,_,_,_,_,_,majsterkowanie],Domy).
% Szukamy kto pracuje w szpitalu.
member([_,Szukany,_,_,_,szpital,_],Domy).
Jednak nie rozwiązują one zagadki. Widzi ktoś błąd? Z góry dziękuję za pomoc