[Aldor-l] Generators
Laurentiu Dragan
ldragan at uwo.ca
Tue Nov 13 08:30:50 EST 2007
Martin Rubey wrote:
> Peter Broadbery <p_broadbery at hotmail.com> writes:
>
>>> I don't know whether we said it in tha AUG, but it is intended that you
>>> cannot assign to loop variables inside the loop.
>>>
>>> Consequently they can be used in type expressions and having dependent
>>> crosses as "for" indices should be allowed.
>
> Oh, that's interesting. So
>
> for i in g repeat {
> (a: MachineInteger, b: SmallPrimeField(a)) == i;
> stdout << a << newline;
> stdout << b << newline;
> }
>
> should be OK? But it doesn't work with -DDEBUG...
>
>> Unfortunately, the compiler isn't keen on them being used in types.
>>
>> "bug2.as", line 10: (x, 0$SPF(x)) for x in 1..10;
>> .........................^
>> [L10 C26] #1 (Error) `x' is used in a type, so must be constant, and so cannot be assigned to.
>>
>> This seems to be built into scobind.c. I'll hit it with a stick & see what
>> happens..
>
> That would be great!
>
> Another mistery, at least to me: Bill sent this snippet:
>
> stdout << "test dependent:" << newline;
> for (a:MachineInteger, b:SmallPrimeField a) in g repeat {
> stdout << a << " " << b << newline;
> }
>
> root at sage:~/aldor-src/aldor/install/aldor# aldor -fx -lalgebra
> -laldor crossiterator.as
> "crossiterator.as", line 63:
> for (a:MachineInteger, b:SmallPrimeField a) in g repeat {
> ............^
> [L63 C13] #1 (Error) `a' is used in a type, so must be constant, and
> so cannot be assigned to.
>
> Any idea why it's C13 here and C26 above?
For type safety, types must constant. By allowing types to change at
runtime, a variable could have different types at runtime which makes
type checking at compile time impossible.
--
Laurentiu
More information about the Aldor-l
mailing list