You are on page 1of 5

Liste

% 1.adauga pe prima pozitie

add(X,L,[X|L]).

add(_,L,L).

% 9.elimina de la pozitia K

remove_at(X,[X|T],1,T).

remove_at(X,[H|T],K,[H|T2]):- K > 1, K1 is K - 1, remove_at(X,T,K1,T2).

% 10.insereaza pe pozitia K

insert_at(X,L,K,R) :- remove_at(X,R,K,L).

% 18.concat 2 lists

append2L([],L,L).

append2L([H|T],L,[H|R]):-append2L(T,L,R).

% 19.concat 3 lists

append3L(L1,L2,L3,R):-append(L2,L3,PR), append(L1,PR,R).

% 20.delete one

delete1(X,[X|T],T):-!.

delete1(X,[H|T],[H|R]):-delete1(X,T,R).

delete1(_, [], []).

% 21.delete aparitii

delete_all(X,[X|T],R):-!,delete_all(X,T,R).
delete_all(X,[H|T],[H|R]):-delete_all(X,T,R).

delete_all(_,[],[]).

% 22.delete aparitii si pastreaza una

delete_all_keepOne(X,[X|T],R):-delete_all_keepOne(X,T,R).

delete_all_keepOne(X,[H|T],[H|R]):-delete_all_keepOne(X,T,R),!.

delete_all_keepOne(_,[],[]).

% 23.add an elem in front of the list

addElemFront(X,L,[X|L]).

% 24.add an elem at the end o the list

addElemEnd(X,L).

% 29.delete_one - deterministic form

delete_one(X,[X|T],T):-!.

delete_one(X,[H|T],[H|R]):-delete_one(X,T,R).

delete_one(_, [], []).

Liste incomplete
member_il(_, L):- var(L), !, fail.

member_il(X, [X|_]):- !.

member_il(X, [_|T]):- member_il(X, T).

insert_il(X, L):- var(L), !, L=[X|_]. %found end of list, add element

insert_il(X, [X|_]):- !. %found element, stop

insert_il(X, [_|T]):- insert_il(X, T). % traverse input list to reach end/X


delete_il(_, L, L):- var(L), !. % reached end, stop

delete_il(X, [X|T], T):- !. % found element, remove it and stop

delete_il(X, [H|T], [H|R]):- delete_il(X, T, R). % search for the element

% 1. Write a predicate which appends two incomplete lists (the result should be an incomplete list
also).

append_il(L1,L2,L2):-var(L1), !.

append_il([H|T],L2,[H|R]):-append_il(T,L2,R).

Arbori
% 1.parcurgere arbore

inorder(t(K,L,R), List):- inorder(L,LL), inorder(R, LR),

append(LL, [K|LR],List).

inorder(nil, []).

preorder(t(K,L,R), List):- preorder(L,LL), preorder(R, LR),

append([K|LL], LR, List).

preorder(nil, []).

postorder(t(K,L,R), List):- postorder(L,LL), postorder(R, LR),

append(LL, LR,R1), append(R1, [K], List).

postorder(nil, []).

% 2.cauta o cheie in arbore

search_key(Key, t(Key, _, _)):- !.

search_key(Key, t(K, L, _)):- Key<K, !, search_key(Key, L).


search_key(Key, t(_, _, R)):- search_key(Key, R).

% 3.insereaza o cheie in arbore

insert_key(Key, nil, t(Key, nil, nil)):- write('Inserted '), write(Key), nl.

insert_key(Key, t(Key, L, R), t(Key, L, R)):- !, write('Key already in tree\n').

insert_key(Key, t(K, L, R), t(K, NL, R)):- Key<K, !, insert_key(Key, L, NL).

insert_key(Key, t(K, L, R), t(K, L, NR)):- insert_key(Key, R, NR).

% 4.sterge o cheie din arbore

delete_key(Key, nil, nil):- write(Key), write(' not in tree\n').

delete_key(Key, t(Key, L, nil), L):- !. % copil stanga sau pt frunza (L=nil)

delete_key(Key, t(Key, nil, R), R):- !. % copil dreapta

%search the key to delete

delete_key(Key, t(K, L, R), t(K, NL, R)):- Key<K, !, delete_key(Key, L, NL).

delete_key(Key, t(K, L, R), t(K, L, NR)):- delete_key(Key, R, NR).

%delete the key

delete_key(Key, t(Key, L, R), t(Pred, NL, R)):- !, get_pred(L, Pred, NL).

get_pred(t(Pred, L, nil), Pred, L):- !.

get_pred(t(Key, L, R), Pred, t(Key, L, NR)):- get_pred(R, Pred, NR).

Arbori incompleti
search_it(_, T):- var(T), !, fail.

search_it(Key, t(Key, _, _)):- !.

search_it(Key, t(K, L, R)):- Key<K, !, search_it(Key, L).


search_it(Key, t(_, _, R)):- search_it(Key, R).

insert_it(Key, t(Key, _, _)):- !.

insert_it(Key, t(K, L, R)):- Key<K, !, insert_it(Key, L).

insert_it(Key, t(_, _, R)):- insert_it(Key, R).

delete_it(Key, T, T):- var(T), !, write(Key), write(' not in tree\n').

delete_it(Key, t(Key, L, R), L):- var(R), !.

delete_it(Key, t(Key, L, R), R):- var(L), !.

delete_it(Key, t(K, L, R), t(K, NL, R)):- Key<K, !, delete_it(Key, L, NL).

delete_it(Key, t(K, L, R), t(K, L, NR)):- delete_it(Key, R, NR).

delete_it(Key, t(Key, L, R), t(Pred, NL, R)):- !, get_pred(L, Pred, NL).

get_pred(t(Pred, L, R), Pred, L):- var(R), !.

get_pred(t(Key, L, R), Pred, t(Key, L, NR)):- get_pred(R, Pred, NR).

You might also like