door(g,h). door(a,b). door(b,c). door(b,d). door(d,f). door(f,e). hasphone(e). hasphone(f). %%============= go(X,X,_). go(X,Y,T):-(door(X,Z);door(Z,X)), not(member(Z,T)), go(Z,Y,[Z|T]). findphone(S,E):-go(S,E,[]),hasphone(E). %%============ go(X,X,P,P). go(X,Y,T,P):-(door(X,Z);door(Z,X)), not( member(Z,T)), go(Z,Y,[Z|T],P). findphone(S,E,P):-go(S,E,[],Px),hasphone(E),reverse(P,Px). %%==================== move(1). move(2). move(3). move(4). win(N,M):-move(M), Nx is N-M, (Nx=<0 ; not(win(Nx,_))).