> I'm not being facetious, I'm trying to understand your perspectives :
For me it's an exercice I give to my students in maple :
create the list of all matrices which can be magic.
They are a subset of this list :
[matrix [[a,b,15-a-b],[c,d,15-c-d],[15-a-c,15-b-d,15-a-d]]
for << all the (a,b,c,d) in 2..8 x 1..9 x 1..9 x 2..8 >> ]
My first query was about this real exercice : create this list of matrices.
(and then extract the magic ones)
mupad syntax is
[matrix [[a,b,15-a-b],[c,d,15-c-d],[15-a-c,15-b-d,15-a-d]]
$a=2..8 $b=1..9 $c=1..9 $d=2..8]
maple syntax is
['''matrix [[a,b,15-a-b],[c,d,15-c-d],[15-a-c,15-b-d,15-a-d]]
$a=2..8' $b=1..9' $c=1..9' $d=2..8]
So I'm looking for a pretty syntax in order to enumerate a cartesian Product
of lists or of segments.
There are 3 possible methods :
// A //
Today we can use
L := [1,3,5,7,9]
concat [concat [[100*a+10*b+c for a in 1..2] for b in 0..9] for c in L]
I don't find fair many concat.
Of corse
Union_{c in C} (Union_{b in B} {F(a,b,c) for c in C})
= {F(a,b,c) for (a,b,c) in AxBxC}
I write the second terms in mathematics,
and so I prefer to have this second syntax in axiom,
and the concat command looks like an union.
// B //
Waldek writes :
> Concerning more general problem: I think that we also need other approaches.
> More precisely, it would be good to add better iteration constructs, which
> make iterating over products easier. For example, something like:
> [[a, b] for a in 1..10 repeat for b in 1..5]
> Well, concat version creates intermediate lists and concatenates them.
> Psychologically double iteration is an atomic operation,
> so it is easier (at least for some folks) to think about.
// C //
Martin seems to prefer :
L := [1,3,5,7,9]
[100*a+10*b+c for (a,b,c) in Product (1..2,0..9,L)]
I don't disapprove this point of view.
The magic [function|domain] Product generates the list
of all the possibilities.
but I'm really waiting for automatic coerces in order to have
a light command in the interpreter because this construct is (for me)
very common. So I don't want to add a lot of $... and @... everytime.
In this case the "keyword" Product has various arguments :
List or Segment. All terms don't have necessary the same type.
An other example :
LP is a list of Lagrange polynoms, Lx is the list of associated values.
I could test :
test (set [eval (P, x) for (P,x) in Product (LP, Lx)] = set [0,1])
test (set [eval (P, x) for (P,x) in Product (LP, 1..8)] = set [0,1])
even if it is better to test with a matrix.
test (matrix [[eval (P, x) for P in LP] for x in Lx] = identity(n))
F.
_______________________________________________
Axiom-math mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/axiom-math