[mercury-users] pragma compiled_memo for compile-time tabled evaluation

Stefan Karrmann sk at mathematik.uni-ulm.de
Sat Sep 6 05:44:40 AEST 2003

André Platzer (Fri, Sep 05, 2003 at 04:03:42PM +0200):
> Hello Mercury users!
> Is there any way to extend tabled evaluation to compile-time? As far as 
> I understand, normal tabled evaluation memorises values computed at 
> run-time. On an invocation with the same arguments, then mercury reuses 
> those values instead of a second computation. This is very cool.
> However, I wonder if there is a way to extend this idea to compile-time. 
> So in case of a constant function like
>    %% computes the number pi with a precision of 500 digits.
>    :- func pi_to_500_digits = string.
>    :- mode pi_to_500_digits = out is det.
>    :- pragma memo(pi_to_500_digits/0).
> after compilation, the program will compute pi to 500 digits only at the 
> first time this constant is used, but repeat this computation for every 
> program run. An improvement in this situation of constant functions (or 
> at least functions depending upon arguments of a small finite domain) 
> would be to perform the respective computation only once, at 
> compile-time instead of repeatedly at each new program run. The compiler 
> would evaluate the function at compile-time and store its tabled value 
> instead of the machine code for performing the computation.

How could one balance compile-time computation against space
consumption? E.g. (in Haskell - sorry)

pi_s_500_digit = pi_to_500_digits !! 500

The space consumption of the result is small, but the computation is
expensive. This is a good case for compile-time computation. While

enumerate_123456 = [1..123456]

consumes much space and minimal time. To decide automatically about
compile-time computation we may need a pragma that sets a threshold:

:- pragma reductions_per_byte_at_compile_time(10).

Store the value in the library if the compiler needs 10 or more
reductions per byte of the value.

mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe

More information about the users mailing list