|
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();
[Prev in Thread] | Current Thread | [Next in Thread] |