axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] Re: 1: %


From: Ralf Hemmecke
Subject: [Axiom-developer] Re: 1: %
Date: Wed, 22 Feb 2006 17:01:42 +0100
User-agent: Thunderbird 1.5 (X11/20051201)

Dear Gaby,

On 02/22/2006 04:00 PM, Gabriel Dos Reis wrote:
Ralf Hemmecke <address@hidden> writes:

| On 02/22/2006 12:21 AM, Gabriel Dos Reis wrote:
| > Ralf Hemmecke <address@hidden> 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();




reply via email to

[Prev in Thread] Current Thread [Next in Thread]