====== Programowanie - Lista 4 ====== ===== Zadanie 1. ===== length2(X,N):- length2(X,N,[],0). length2(X,N,Y,N):- reverse(Y,X). length2(X,N,Y,M):- M2 is M+1, Y2=[_|Y], nonvar(N),!, N>=M, length2(X,N,Y2,M2),!. length2(X,N,Y,M):- M2 is M+1, Y2=[_|Y], nonvar(X),!, length2(X,N,Y2,M2),!. length2(X,N,Y,M):- M2 is M+1, Y2=[_|Y], length2(X,N,Y2,M2). ===== Zadanie 2. ===== 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]). ===== Zadanie 3. ===== 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 ).