DOMAINS r=real lr=r* PREDICATES run lcount(lr,r) % (i,o) lcount2(lr,r) % (i,o) lcount2(lr,r,r) % (i,a,o) mkln(r,lr) % (i,o) mkln(r,lr,lr) % (i,a,o) spprod(lr,r) %(i,o) factrl(r,r) % (i,o) lsum(lr,r) % (i,o) lsum2(lr,r) % (i,o) lsum2(lr,r,r) % (i,a,o) lconcat(lr,lr,lr) % (i,i,o) lrev(lr,lr) % (i,o) lrev(lr,lr,lr) % (i,a,o) lconcat2(lr,lr,lr) % (i,i,o) lconcat3(lr,lr,lr) % (i,a,o) CLAUSES %(i,o) lcount([],0). lcount([_|T],R):-lcount(T,Ri),R=Ri+1. lcount2(L,R):-lcount2(L,0,R). lcount2([],Ri,Ri). %(i,i,o) lcount2([_|T],Ri,R):-Ria=Ri+1,lcount2(T,Ria,R). mkln(N,R):-N>0,mkln(N,[],R). mkln(0,Ri,Ri). % (i,i,o) mkln(Ni,Ri,R):-Ni>0,Nia=Ni-1,mkln(Nia,[Ni|Ri],R). spprod([X],X). spprod([X,Y|T],R):-Z=X*Y,spprod([Z|T],R). factrl(N,R):-N<=170,mkln(N,L),spprod(L,R). lsum([X],X). lsum([H|T],R):-lsum(T,Ri),R=H+Ri. lsum2(L,R):-lsum2(L,0,R). lsum2([],Ri,Ri). %(i,i,o) lsum2([H|T],Ri,R):-Ria=H+Ri,lsum2(T,Ria,R). lconcat([],L,L). lconcat([H|T],L,[H|R]):-lconcat(T,L,R). lrev(L,R):-lrev(L,[],R). lrev([],Ri,Ri). % (i,i,o) lrev([H|T],Ri,R):-lrev(T,[H|Ri],R). % numai (i,i,o): lconcat2(A,B,R):-lrev(A,A2),lconcat3(A2,B,R). lconcat3([],L,L). % (i,i,o) lconcat3([H|T],L,R):-lconcat3(T,[H|L],R). % exemple de handlere catre elementele si sublistele unei liste run:- write("______"),nl,nl, X=[1,2], X=[H|Tail], write("H: "), write(H), nl,nl, write("Tail: "), write(Tail), nl,nl, X=[A,B|T], write("[A,B]: "),AB=[A,B], write(AB), nl,nl, write("T: "), write(T), nl,nl, X=[_,C|D], write("C: "), write(C), nl,nl, write("D: "), write(D), nl,nl, L=[3,4,5,6,7], L=[_,_|TT], write("TT: "), write(TT), nl,nl, L=[_,_|[E,F|TA]], write("E: "), write(E), nl,nl, write("F: "), write(F), nl,nl, write("TA: "), write(TA), nl, write("______"), nl.