Tuesday, 30 October 2007

DOMAINS
list=real*

PREDICATES
lcard(list,real)
lcard(list,real,real)

lconcat(list,list,list)

lconcat2(list,list,list)

revers(list,list)
revers(list,list,list)

ladun(list,list,list)
ladun(list,list,list,list)

linmult(list,real,list)
linmult(list,real,list,list)

prods(list,list,real)
prods(list,list,real,real)

rlindexof(list,real,list)
rlindexof(list,real,real,list,list)

%llindexof(list,list,list)
%llindexof(list,list,real,list,list)

l3concat(list,list,list,list)

CLAUSES

%__________CARDINALUL_UNEI_LISTE_______________________

lcard(L,R):-lcard(L,0,R).
lcard([],Ria,Ria).
lcard([H|Tail],Ri,R):-Ria=Ri+1,lcard(Tail,Ria,R).

%__________CONCATENAREA_A_DOUA_LISTE_(A_D0UA_DE_PRIMA__

lconcat([],L,L).
lconcat([H1|T1],L2,[H1|T3]):-lconcat(T1,L2,T3).

%__________CONCATENAREA_A_DOUA_LISTE_(PRIMA_DE_A_DOUA)_

lconcat2(L,[],L).
lconcat2(L1,[H2|T2],[H2|T3]):-lconcat2(L1,T2,T3).

%__________INVERSARAE_UNEI_LISTE_______________________

revers(L,R):-revers(L,[],R).
revers([],Ri,Ri).
revers([H|T],Li,R):-lconcat([H],Li,Ri),
revers(T,Ri,R).

%__________ADUNAREA_A_DOUA_LISTE_______________________

ladun(L1,L2,L3):-lcard(L1,C1),
lcard(L2,C2),
C1=C2,
ladun(L1,L2,[],L3),!;
write("Nu au aceeasi lungime."),fail.
ladun([],[],Lia,Lia).
ladun([H1|T1],[H2|T2],Li,L3):-S=H1+H2,
lconcat([S],Li,Lia),
ladun(T1,T2,Lia,L3).

%__________INMULTIREA_UNEI_LISTE_CU_UN_SCALAR___________

linmult(L,X,R):-linmult(L,X,[],R).
linmult([],X,Lia,Lia).
linmult([H|T],X,Li,R):-C=H*X,
lconcat(Li,[C],Lia),
linmult(T,X,Lia,R).

%__________PRODUSUL_SCALAR_A_DOUA_LISTE_________________

prods(L1,L2,R):-lcard(L1,C1),
lcard(L2,C2),
C1=C2,
prods(L1,L2,0,R),!;
write("Tre' sa fie egale."),fail.
prods([],[],Ria,Ria).
prods([H1|T1],[H2|T2],Ri,R):-Ria=Ri+(H1*H2),
prods(T1,T2,Ria,R).

%__________INDEX_OF_N_IN_LISTA_________________________

rlindexof(L,N,Lr):-rlindexof(L,N,0,[],Lr).
rlindexof([],N,Conti,Lia,Lia).
rlindexof([H|Tail],N,Cont,Li,Lr):-
Conti=Cont+1,
H=N,
lconcat(Li,[Conti],Lia),
rlindexof(Tail,N,Conti,Lia,Lr);
H<>N,
Conti=Cont+1,
rlindexof(Tail,N,Conti,Li,Lr).

%__________INDEX_OF_L_IN_LISTA_____________________

/*llindexof(L1,L2,L3):-llindexof(L1,L2,0,[],L3).
llindexof([],L2,Conti,Lia,Lia).
llindexof([H1|T1],L2,Cont,Li,L3):-
lcard(L1,Card1),
rlindexof(L2,H1,Lu),
lcard(Lu,Cardu),
Card1=Cardu,
Conti=Cont+1,
lconcat(Li,[Conti],Lia),
llindexof(T1,L2,Conti,Lia,L3);
rlindexof(L2,H1,Lu),
lcard(L1,Card1),
lcard(Lu,Cardu),
Card1<>Cardu,
Conti=Cont+1,
llindexof(T1,L2,Conti,Li,L3).*/

%____________________

l3concat(X,L1,Y,L2):-lconcat(X,L1,X1),
lconcat(X1,Y,L2).

No comments: