[Aldor-l] Generators (destructuring cross)

Martin Rubey martin.rubey at univie.ac.at
Wed Nov 7 14:07:57 EST 2007


I just noticed that

 -DWantRuntimeError 

works, only  

  -DWantRuntimeError -Ddebug 

produces a runtime error.  So, maybe there is hope?  The error message is

Unhandled Exception: RuntimeError()
Assert failed in sit_spf0, at line:28: p > 1

Martin


Martin Rubey <martin.rubey at univie.ac.at> writes:

> aldor -fx  -lalgebra -laldor ~/aldor-test/crossiterator.as
> -------------------------------------------------------------------------------
> #include "aldor"
> #include "algebra"
> #include "aldorio"
> 
> --#include "axiom"
> Cr ==> Cross(n: MachineInteger, SmallPrimeField n);
> D ==> Record(n: MachineInteger, s:SmallPrimeField n);
> 
> f(p: MachineInteger, m: MachineInteger): D == { 
>         import from SmallPrimeField p;
>         e := [p, m::SmallPrimeField p]$D; 
> }
> 
> g: Generator Cr == generate {
>         import from MachineInteger, Cr;
>         yield explode(f(3, 5))$D;
>         yield explode(f(5, 5))$D;       
> }
> 
> h: Generator Cross(MachineInteger, String, SmallPrimeField 5) == generate {
>         import from MachineInteger, String, SmallPrimeField 5;
>         yield (3, "drei", 3::SmallPrimeField 5);
>         yield (8, "acht", 8::SmallPrimeField 5);
> }
> 
> i: Generator Cross(MachineInteger, MachineInteger) == generate {
>         import from MachineInteger;
>         yield (2, 3);
>         yield (4, 5);
>         yield (6, 7);
> }
> 
> bug(): () == {
>         import from MachineInteger, Cr, List Cr;
>         d1: D := f(3, 5);
>         c1: Cr := explode(d1)$D;
>         l: List Cr := [c1];
> }
> 
> main(): () == {
>         import from MachineInteger, Cr, Generator Cr;
> #if WantSegfault
>         bug();
> #endif
>         stdout << "test dependent, old style:" << newline;      
>         for i in g repeat {
>                 (a: MachineInteger, b: SmallPrimeField(a)) == i;
>                 stdout << a << newline;
> #if WantRuntimeError            
>                 stdout << b << newline;
> #endif          
>         }
>         
> #if DoesntCompile       
>         stdout << "test dependent:" << newline;
>         for (a, b) in g repeat {
>                 stdout << a << newline;
>         }       
> #endif  
>         stdout << "test Cartesian:" << newline;
>         import from SmallPrimeField 5;
>         for (a, b, c) in h repeat {
>                 stdout << a << " " << b << " " << c << newline;
>         }
>         
>         stdout << "test Cartesian List:" << newline;
>         import from List MachineInteger;
>         stdout << [a*b for (a, b) in i] << newline;
>         
> }
> 
> main();
> 
> 
> 
> _______________________________________________
> Aldor-l mailing list
> Aldor-l at aldor.org
> http://aldor.org/mailman/listinfo/aldor-l_aldor.org




More information about the Aldor-l mailing list