CONSTANTS e= 2.71828182845904523536 % theoretical value of Euler's number em=2.71828182845904532907 % Matlab value for Euler's number ep=2.718281828459045773159928 % e170, value of Euler's number computed in Prolog maxint=32767 % 2^15 - 1 (signed integer), Prolog maxfact=170 % factorial(171)>1e308, maxreal=1e308, Prolog PREDICATES euler(real,real) euler(real,real,real,real) e170(real) % compute Euler's number in 170 iterations (with minimal number of arithmetic operations) e170(integer,integer,real,real,real) e170(integer,real) % compute Euler's number in at most 170 iterations (with minimal number of arithmetic operations) %e170(integer,integer,real,real,real) fact(integer,real) fact(integer,real,real) CLAUSES euler(N,R):-euler(N,N,1,R). euler(_,0,Ri,Ri). % (i,i,i,o) euler(N,Ci,Ri,R):-Ci>0,Ria=Ri*(1+1/N),Cia=Ci-1,euler(N,Cia, Ria, R). e170(R):-e170(0,170,1,1,R).% (Ci,Cf,RFi,Ri,R) e170(Cf,Cf,_,Ri,Ri). % (i,i,i,o) e170(Ci,Cf,RFi,Ri,R):- Ci<Cf,Cia=Ci+1, RFia=RFi*Cia,Ria=Ri+1/RFia, e170(Cia,Cf,RFia,Ria,R). e170(N,R):-N<=maxfact,e170(0,N,1,1,R). fact(0,1). fact(N,R):-N<=170,fact(N,1,R). fact(0,Ri,Ri). % (i,i,o) fact(N,Ri,R):-N>0,Na=N-1,Ria=Ri*N,fact(Na,Ria,R).