length2(X,N):- length2(X,N,[],0). length2(X,N,Y,N):- reverse(Y,X). length2(X,N,Y,M):- M2 UR1|"http://pauillac<DOT>inria<DOT>fr/~deransar/prolog/bips<DOT>html">is M+1, Y2=[_|Y], UR1|"http://pauillac<DOT>inria<DOT>fr/~deransar/prolog/bips<DOT>html">nonvar(N),!, N>=M, length2(X,N,Y2,M2),!. length2(X,N,Y,M):- M2 UR1|"http://pauillac<DOT>inria<DOT>fr/~deransar/prolog/bips<DOT>html">is M+1, Y2=[_|Y], UR1|"http://pauillac<DOT>inria<DOT>fr/~deransar/prolog/bips<DOT>html">nonvar(X),!, length2(X,N,Y2,M2),!. length2(X,N,Y,M):- M2 UR1|"http://pauillac<DOT>inria<DOT>fr/~deransar/prolog/bips<DOT>html">is M+1, Y2=[_|Y], length2(X,N,Y2,M2).
connection(warszawa,lodz). connection(warszawa,zakopane). connection(warszawa,wroclaw). connection(wroclaw,legnica). connection(lodz,krakow). connection(zakopane,krakow). road(X,Y):- connection(X,Y). road(X,Y):- connection(Y,X). trip(X,Y,Z):- trip(X,Y,Z,[Y]). trip(X,_,[X|Z],[X|Z]). trip(X,Y,Z,[H|S]):- road(M,H), \+member(M,[H|S]), trip(X,Y,Z,[M,H|S]).
rbin( [0] ). rbin( X ):- rbin( Z ), rinc( Z, X ). rinc( [], [1] ):-!. rinc( [0|T], [1|T] ):-!. rinc( [1|T], [0|T1] ):-!, rinc( T, T1 ). bin( [0] ). bin( X ):- bin( Z ), inc( Z, X ). inc( X, X1 ):- inc( X, [], X1 ). inc( [], A, X ):-!, rinc( A, XR ), reverse( XR, X ). inc( [H|T], A, X1 ):- inc( T, [H|A], X1 ).