door(a,b). door(b,e). door(b,c). door(d,e). door(c,d). door(e,f). door(g,e). go(Start,Dest,Route) :- go0(Start,Dest,[],Route). go0(X,X,T,[X|T]). go0(Place,Y,T,R) :- legalnode(Place,T,Next), go0(Next,Y,[Place|T],R). legalnode(X,Trail,Y) :- (door(X,Y);door(Y,X)), legal(Y,Trail). legal(X,[]). legal(X,[H|T]) :- \+ X = H, legal(X,T). hasphone(g).