Dear Gaby,
On 02/22/2006 04:00 PM, Gabriel Dos Reis wrote:
Ralf Hemmecke <[EMAIL PROTECTED]> writes:
| On 02/22/2006 12:21 AM, Gabriel Dos Reis wrote:
| > Ralf Hemmecke <[EMAIL PROTECTED]> writes:
| > | > | The problem is the "1: %" as a constant (not a nullary
| > function).
| > | > The distinction is largely syntactic, not fundamental.
| > | | I was once told that in Aldor the difference between
| > | a: %
| > | and
| > | b: () -> %
| > | is that
| > | b() will run a program which might side-effect other things or even
| > | return something different each time.
| > expanding on my preivous answer, have a look at the section 5.2 os
| > the
| > Aldor user guide on literal forming -- you can define your own function
| > to interpret a string literal as a constant.
|
| I knew about this Literal stuff before...
I have no doubt about that :-)
| http://lists.gnu.org/archive/html/axiom-developer/2006-02/msg00154.html
|
| But as you see, if you write a domain that has a function
| string: Literal -> %,
| it is a function and that means that "1" and "1" need not give
| identical values.
yes, that is precisely why I said in an earlier message that the
distinction is largely syntactic. it is not something fundamental in
the context of your discussion about axiom and o stuff.
Underneath, everything is a function in Aldor!
Well, it might depend on which level you look at it. If the generated C
code is concerned, I have no idea about that.
But if it were really just syntactic, then the output given below is
strange.
However, this behaviour is exactly, the difference between a constant
and a nullary function in Aldor.
Aldor computes the value for x at the time the domain is instantiated.
So it is constant over the lifetime of the domain (unless some dirty
tricks change that value). For y it is different. That is a function
constant. But a constant of type ()->% not of type %. Now, of course, if
you say "y()", you get something of type %. But each time you call y()
you might get a differen element of %.
I guess, you know all this stuff.
Ralf
aldor -laldor -grun domaintest.as
172443481
172443481
1911439442
1127848893
---domaintest.as
#include "aldor"
DomA: with {
x: %;
y: () -> %;
coerce: % -> Integer;
} == add {
Rep == Integer;
import from Rep;
x : % == per random();
y(): % == per random();
coerce(x: %): Integer == rep x;
}
main(): () == {
import from TextWriter, Character, Integer;
a: DomA := x; stdout << (a::Integer) << newline;
b: DomA := x; stdout << (b::Integer) << newline;
a: DomA := y(); stdout << (a::Integer) << newline;
b: DomA := y(); stdout << (b::Integer) << newline;
}
main();
_______________________________________________
Axiom-developer mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/axiom-developer