====== Lista 2 (Lic.) ======
=====1=====
append( X, X, Y ).
member( X, [a,b,c,d] ), delete( [a,b,c,d], X , [a,c,d] ).
append( [a,b,c] , X, [a,b,c,d,e] ).
=====2=====
even( [] ):-!. % to jest odcięcie, nie było tego jeszcze na wykładzie, ale działa tak, że prolog nie próbuje już dopasować innej reguły jak ta będzie ok.
even( [] ). % ewentualnie to, jak nie chcecie sie wyróżniać z tłumu, stosować tylko jeden z podanych ;p
even( [_,_|T ):-even( T ).
palindrom( X ):- reverse( X , X ). %nie jestem pewien, czy nie ma lepszego rozwiazania
singleton( [_] ).
=====3=====
head( H, [H|_] ).
last( X, [X] ):-!.%tak jak wyżej
last( X, [_|T ):-last(X,T).
tail( T, [_|T]).
init( [], [_] ):-!.
init( [H|I], [H|L] ):-init( I, L ).
prefix( [], _ ):-!.
prefix( [H|P], [H|L] ):-prefix( P, L ).
sufix( X, X ):-!.
sufix( S, [H|L]):- sufix( S, L ).
=====4=====
sublist( [], [] ):-!.
sublist( [H|T], [H|W] ):-sublist( T, W ).
sublist( [_|T], W ):-sublist( T, W ).
=====5=====
perm( [], [] ):-!.
perm( X , [Y|W] ):- member( Y, X ), delete( X, Y, XLESS ),perm( XLESS, W ).
=====6=====
perm( [], [] ):-!.
perm( [H|T], X ):- perm( T, W ), insert( H, W, X ).
insert( E, [], [E]):-!.
insert( E, W, [E|W] ).
insert( E, [H|W], [H|X] ):-insert(E,W,X).