Witam, nie działa mi kod napisany w prologu, chciałbym aby ktoś pomógł mi rozwiązać w czym tkwi problem i dlaczego owe zadanie nie daje odpowiedzi. Treśc zadania :
Wyrazić w Prologu wszelkie relacje rodzinne takie jak: dziadek, babcia, syn, dziecko, córka, brat, siostra, stryj(brat ojca), wuj(brat matki), ciotka, potomek, przodek, kuzyn, żona, mąż, krewny, liczba potomków itd. dla dowolnej bazy danych, która zawiera relacje: ojciec(s,s), matka(s,s), plec(s,s)
Przykładowo dla bazy:
ojciec(edward,halina).
ojciec(jan,adam).
ojciec(piotr,krzysztof).
ojciec(jan,maria).
ojciec(adam,monika).
ojciec(adam,norbert).
matka(halina,monika).
matka(monika,maciej).
matka(ewa,maria).
matka(ewa,adam).
matka(maria,krzysztof).
plec(maciej,m)
plec(norbert,m)
plec(piotr,m)
plec(krzysztof,m)
przykładowo program powinien odpowiadać na zapytania:
kuzyn(krzysztof,norbert) -> yes
dziadek(edward,monika) -> yes
maz(adam,halina) -> yes
potomek(maciej,jan) -> yes
krewni(maciej,krzysztof) -> yes
dziadek(jan,X) -> X=’monika’,X=’norbert’,X=’krzysztof’
liczba_potomkow(X,jan) -> X=6
% Moje zadanie
ojciec(edward,halina).
ojciec(jan,adam).
ojciec(piotr,krzysztof).
ojciec(jan,maria).
ojciec(adam,monika).
ojciec(adam,norbert).
matka(halina,monika).
matka(monika,maciej).
matka(ewa,maria).
matka(ewa,adam).
matka(maria,krzysztof).
plec(maciej,m).
plec(norbert,m).
plec(piotr,m).
plec(krzysztof,m).
plec(edward,m).
plec(jan,m).
plec(ewa,k).
plec(halina,k).
plec(adam,m).
plec(maria,k).
plec(monika,k).
plec(krzysztof,m).
syn(X,Y) :- plec(X,m), ojciec(Y,X),X\==Y.
syn(X,Y) :- plec(X,m), matka(Y,X),X\==Y.
corka(X,Y) :- plec(X,k), ojciec(Y,X),X\==Y.
corka(X,Y) :- plec(X,k), matka(Y,X),X\==Y.
dziecko(X,Y) :- ojciec(Y,X),X=\=Y.
dziecko(X,Y) :- matka(Y,X),X\==Y.
rodzic(X,Y) :- dziecko(Y,X),X\==Y.
rodzenstwo(X,Y) :- rodzic(Z,X),rodzic(Z,Y),X\==Y,X\==Z,Y\==X.
brat(X,Y) :- plec(X,m),rodzic(Z,X),rodzic(Z,Y),X\==Y,X\==Z,Y\==X.
siostra(X,Y) :- plec(X,k),rodzic(Z,X),rodzic(Z,Y),X\==Y,X\==Z,Y\==X.
wuj(X,Y) :- matka(Z,Y),brat(X,Z),X\==Y,X\==Z,Y\==Z.
stryj(X,Y) :- ojciec(Z,Y),brat(X,Z),X\==Y,X\==Z,Y=\=Z.
ciotka(X,Y) :- matka(Z,Y),siostra(X,Z),X\==Y,X\==Z,Y\==Z.
ciotka(X,Y) :- ojciec(Z,Y),siostra(X,Z),X\==Y,X\==Z,Y\==Z.
babcia(B,A):-rodzic(C,A),rodzic(B,C),plec(B,k),A\==B,A\==C,B\==C.
dziadek(B,A):-rodzic(C,A),rodzic(B,C),plec(B,m),A\==B,A\==C,B\==C.
zona(X,Y) :- plec(X,k),dziecko(Z,X),dziecko(Z,Y),X\==Y,X\==Z,Y=\=Z.
maz(X,Y) :- plec(X,m),dziecko(Z,X),dziecko(Z,Y),X\==Y,X\==Z,Y\==Z.
kuzyn(X,Y) :- plec(X,m),dziecko(X,Z),wuj(Z,Y),X\==Y,X\==Z,Y\==Z.
kuzyn(X,Y) :- plec(X,m),dziecko(X,Z),ciotka(Z,Y),X\==Y,X\==Z,Y=\=Z.
kuzyn(X,Y) :- plec(X,m),dziecko(X,Z),stryj(Z,Y),X\==Y,X\==Z,Y\==Z.
potomek(X,Y) :- rodzic(Y,X). % rodzic(Y,X). to to samo co dziecko(X,Y).
potomek(X,Y) :- rodzic(Z,X),potomek(Z,Y).
przodek(X,Y) :- dziecko(Y,X).
przodek(X,Y) :- dziecko(Z,X),przodek(Z,Y).
krewny(X,Y) :- dziecko(X,Y);rodzic(X,Y);kuzyn(X,Y);babcia(X,Y);dziadek(X,Y),X\==Y.
liczba_przodkow(X,Z) :- findall(Y, przodek(X,Y), X1),counter(X1,Z).
counter([],0).
counter([_|T],N) :- counter(T,N1),N is N1+1.
matka3(tak,X,Y) :- matka(X,Y).
matka3(nie,X,Y) :- not(matka(X,Y)),matka(Z,Y),Z\==X.
matka3(brak_danych,X,Y) :- not(matka(X,Y)),not(matka(Z,Y)),Z\==X.
Podczas wpisywania przykładów, wyświetla się błąd : ==/2: Arithmetic: `monika/0' is not a function