:-main(1000).
%main(A, B) :- gen(0, A, 10, As), gen(0, B, 5, Bs) , merge(As, Bs, Rs), outputln(Rs). 
%main(Max) :- gen(0, Max, 3, A), outputln(A). 
%main(A) :- ave(0, A, 0, Os), outputln(Os). 
main(Max) :- gen(0, Max, 10, S), ave(0, S, 0, Os), outputln(Os). 

outputln(Xs)       :- true | output(Xs, Os), io:outstream(Os).
output([P|Ps], Os) :- true | Os = [write(P), nl|Os1], output(Ps, Os1).
output([]    , Os) :- true | Os = [].

gen(N, Max, Step, Ns) :- N=<Max | Ns=[N|Ns1], N1:=N+Step, gen(N1, Max, Step, Ns1) .
gen(N, Max, Step, Ns) :- N>Max  | Ns=[].

ave(N, [X|Xs], A, Os) :- true | Os=[As|Os1], N1:=N+1, As:=(X+A)/N1, ave(N1, Xs, As, Os1).
ave(N, []    , A, Os) :- true | Os=[].
