====== 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 ).