[Aldor-l] [Axiom-developer] spad: language and compiler
Ralf Hemmecke
ralf at hemmecke.de
Thu Aug 31 06:16:54 EDT 2006
> Probably what we need is some kind of recursive type constructor.
> See for example:
>
> http://www.cs.kent.ac.uk/people/staff/sjt/Atypical/AldorExs/vector.as
If you look closer to that, then you see that vector.as is implementing
"List" in a terribly complicated way.
Look at
-- Add up the entries of a Vector(n).
addVec(n:Integer,v:Vector(n)):Integer
== {
import from Record(fst:Integer,rst:Vector(n-1));
if n<=1
then 0
else vec.fst + addVec(n-1,vec.rst);
where { vec == (v pretend -- A
Record(fst:Integer,rst:Vector(n-1))); }};
in particular look at the argument. If it were a list you could forget
about the n, but here you have to give it. I am sure, nobody would ever
use such code.
If you must have a union over Vectors of arbitrary lenght then a cleaner
design would be to define vectors of lenght n and in a second step
define operations on vectors of different length.
In aldor-combinat you would define that thing like in the BinaryTree
example I gave before but just use the equation V = 1 + X * V.
And, by the way, I did not use "pretend" in my code.
Ralf
More information about the Aldor-l
mailing list