Gabriel Dos Reis <[EMAIL PROTECTED]> writes:
> Hi,
>
> Here is a problem -- currently failing -- for type inference in the
> interpreter. Consider (taken from current testsuite)
>
> primes == [p := nextPrime(i = 0 => 2; p) for i in 1..]
> primes
I guess you meant to type i = 1 above. In that case, the following works:
(1) -> p: INT
Type: Void
(2) -> [(p := nextPrime(i = 1 => 2; p)) for i in 1..]
(2) [3,5,7,11,13,17,19,23,29,31,...]
Type: Stream Integer
Note that you have to supply a parenthesis around (p := ...). I believe that
this helps the interpreter to notice that (p := ...) is actually a function.
This gives us some more information, in fact: without the p: INT, it tells us
that it cannot compile (p := ...), which I find not so surprising anymore. But
probably, that is exactly what you *did* find surprising, or at least
annoying. So, what you want is that
(p := f(firstTime? => someValue; p))
can be resolved, namely using the meet of someValue and the result type of
f(someValue)...
Looks pretty hard to me, though.
Did I get you?
Martin
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
open-axiom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open-axiom-devel