Cześć,
otrzymałem ostatnio takie zadanie: Napisz predykat, który sprawdza czy dana osoba jest w stanie skontaktować się z drugą, nie znając bezpośrednio jej numeru.
Tutaj jest mój kod:
szukaj(Kto,DoKogo,Trasa) :- telefon(_,DoKogo), go(Kto,DoKogo,[],Trasa).
go(X,X,T,R):- reverse(T,R).
go(X,Y,T,R):- telefon(X,Z),\+member(Z,T), go(Z,Y,[Z|T],R).
go(X,Y,T,R):- telefon(Z,X), \+member(Z,T), go(Z,Y,[Z|T],R).
telefon(adam,ania).
telefon(ania,karol).
telefon(karol,basia).
telefon(basia,adam).
telefon(karol,dominik).
chciałbym, aby poza sprawdzeniem czy dane połączenie istnieje program także wypisał trasę, która pozwala na dotarcie do danej osoby.
Jednak zapytanie:
?- szukaj(adam,dominik,Trasa).
Nie dość, że w wyniku pomija pierwszą osobę, to jeszcze niektóre trasy wypisuje niepoprawnie tzn, osoba początkowa zostaje wypisana na drugim miejscu trasy.
Poniżej kod wyniku zapytania dla jasności:
?- szukaj(adam,dominik,Trasa).
Trasa = [ania, karol, dominik] ;
Trasa = [ania, adam, basia, karol, dominik] ;
Trasa = [basia, adam, ania, karol, dominik] ;
Trasa = [basia, karol, dominik] ;
false.
Proszę o pomoc, gdzie robię błędy i jak mogę rozwiązać mój problem