% nacteni:
/* ['2.2_4.pl']. */
del(_,[],[]).
del(A,[A|T],V) :- del(A,T,V).
del(A,[H|T1],[H|T2]) :- A\=H, del(A,T1,T2).
del1(A,[A|T],T).
del1(A,[H|T1],[H|T2]) :- del1(A,T1,T2).
insert(A,L,[A|L]).
insert(A,[H|T1],[H|T2]):- insert(A,T1,T2).
insert1(X,List ,[X|List]).
% demonstracni vypis
% abychom se vyhli varovanim "Redefined static procedure ..."
:- dynamic
write_all_X/3,
start/0.
write_all_X(Goal,X,Name):-
call(Goal),write(' '),write(Name),write(' = '),write(X),nl,fail.
write_all_X(_,_,_).
write_all_XY(Goal,X,NameX,Y,NameY):-
call(Goal),write(' '),write(NameX),write(' = '),write(X),write(','),write(NameY),write(' = '),write(Y),nl,fail.
write_all_XY(_,_,_,_,_).
start:-
write('Prace se seznamy - del a insert'),nl,
write('-------------------------------'),nl, nl,
write('predikat del(A,L,Vysl) smaze vsechny vyskyty prvku A ze seznamu L'),nl,
write('Vysledek volani "del (1,[1,2,1,1,2,3,1,1], L)":'),nl,
write_all_X(del(1,[1,2,1,1,2,3,1,1], L), L, 'L'),nl,
write('del1(A,L,Vysl) smaze vzdy jeden (podle poradi) vyskyt prvku A v seznamu L'),nl,
write('Vysledek volani "del1(1,[1,2,1],L)":'),nl,
write_all_X(del1(1,[1,2,1],L), L, 'L'),nl,
write('del1 je mozne pouzit i vicesmerne - prochazeni seznamu v podobe deleni na jeden prvek a zbyvajici prvky'),nl,
write('Vysledek volani "del1(X,[1,2,1],L)":'),nl,
write_all_XY(del1(X,[1,2,1],L), X, 'X', L, 'L'),nl,
write('insert(A,L,Vysl) vklada postupne (pri zadosti o dalsi reseni) na vsechny pozice seznamu L prvek A'),nl,
write('Vysledek volani "insert(4,[2,3,1], L)":'),nl,
write_all_X(insert(4,[2,3,1], L), L, 'L'),nl,
write('insert1(A,L,Vysl) vlozi A na zacatek seznamu L'),nl,
write('Vysledek volani "insert1(4,[2,3,1], L)":'),nl,
write_all_X(insert1(4,[2,3,1], L), L, 'L').
?-start.
:- retractall(write_all_X/3).
:- retractall(start/0).
Prace se seznamy - del a insert
-------------------------------
predikat del(A,L,Vysl) smaze vsechny vyskyty prvku A ze seznamu L
Vysledek volani "del (1,[1,2,1,1,2,3,1,1], L)":
L = [2,2,3]
del1(A,L,Vysl) smaze vzdy jeden (podle poradi) vyskyt prvku A v seznamu L
Vysledek volani "del1(1,[1,2,1],L)":
L = [2,1]
L = [1,2]
del1 je mozne pouzit i vicesmerne - prochazeni seznamu v podobe deleni na jeden prvek a zbyvajici prvky
Vysledek volani "del1(X,[1,2,1],L)":
X = 1,L = [2,1]
X = 2,L = [1,1]
X = 1,L = [1,2]
insert(A,L,Vysl) vklada postupne (pri zadosti o dalsi reseni) na vsechny pozice seznamu L prvek A
Vysledek volani "insert(4,[2,3,1], L)":
L = [4,2,3,1]
L = [2,4,3,1]
L = [2,3,4,1]
L = [2,3,1,4]
insert1(A,L,Vysl) vlozi A na zacatek seznamu L
Vysledek volani "insert1(4,[2,3,1], L)":
L = [4,2,3,1]
|