%
% 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).