% % Ex.3 on-line average estimation % % Haixun Wang, hxwang@cs.ucla.edu %% database( { q(P:float, X:integer) } ). %% export appro_avg(P). export exact_avg(P). %% appro_avg(myavg)<-q(P,A). exact_avg(avg_all)<-q(P,A). single(myavg, X, (X,0,1)). multi(myavg, As, (Ao,Go,Co), (A,G,C)) <- C = Co+1, A = (Ao*Co*1.0+As)/C, if ( 1-Ao/A <0.003, 1-Ao/A>-0.003 then G=Go+1 else G=0), Go<10. return(myavg, X, (A,G,C), (A,C))<- mod(C,10). return(myavg, nil, (A,G,C), (A,C)). mod(X,X). mod(X,Y)<-X>Y, mod(X-Y,Y).