arrays/lists with multi-idices



Thanks a lot!

I have understood more or less 
how to it with hashed arrays, which
unfortunatelly is not efficient way in my
specific application in which I know in advance
that I will use all the entries of the arrays.
I still don't understand clearly the difference
between "[...]" and local(...) but I know the
only local works with arrays.
describe(local) does not clarify it for me.

I would like to work with a multi dimensional array
whose dimension is passed as a parameter, which
can be accessed constant time even in the worst case.

Maybe this can be done by recursively calling
make_array, i.e. an array of arrays of ...
Any suggestions are welcome.

  Fabrizio





On Tue, 19 Jun 2007, Richard Fateman wrote:

> Maxima is really much simpler to use than you image, partly because your
> preconceived notions are colored by previous experience with languages that
> are much more restricted.
> 
> Try this:
> 
> foo():=block([],local(b),b[[1,2,3]]:x1, b[[6]]:x2, b[foobar/7]:x3, print
> (arrayinfo(b)), listarray(b));
> 
> You can get the indices in use, and the values in use, in an indexed data
> structure that you could use as an array, or you could use as something
> else. 
> 
> > -----Original Message-----
> > From: maxima-bounces at math.utexas.edu 
> > [mailto:maxima-bounces at math.utexas.edu] On Behalf Of Fabrizio Caruso
> > Sent: Tuesday, June 19, 2007 2:05 AM
> > To: Robert Dodier
> > Cc: maxima at math.utexas.edu
> > Subject: Re: [Maxima] arrays/lists with multi-idices
> > 
> > Hi again,
> > 
> > Sorry, but I haven't still understood how to use
> > arrays with list indeces.
> > 
> > What I need to do is simply a procedure deCasteljau(...,n,deg)
> > that works with b[a_1,a_2,...,a_n] 
> > or b[[a_1,a_2,...,a_n]], 0<=a_i<=deg,
> > where n is passed as a parameter, i.e.
> > multi-indeces whose arity is given by a parameter.
> > 
> > The algorithm we are trying to implement 
> > is the multivariate "de Casteljau algorithm"
> > for Bezier hypersurfaces.
> > 
> > 
> > I get the following error messages:
> > 
> > If I do:
> > (%i22) foo (x) := block (local (b), array (b, 5), 
> > arrayapply(b,[1,2,3]) : 
> > x, listarray (b));
> > (%i23) foo(10);
> > "
> > 
> > I then get:
> > "
> > Improper value assignment:
> > arrayapply(b, [1, 2, 3])
> > #0: foo(x=10)
> >  -- an error.  To debug this try debugmode(true);
> > "
> > 
> > If I do
> > "
> > (%i26) foo (x) := block (local (b), array (b, 5), b[[1,3,4]] : x, 
> > listarray (b));
> > (%o26) foo(x) := block(local(b), array(b, 5), b	         : x, 
> > listarray(b))
> > 					       [1, 3, 4]
> > (%i27) foo(10);
> > "
> > I get:
> > Array b has dimensions [5], but was called with [[1,3,4]]
> > #0: foo(x=10)
> >  -- an error.  To debug this try debugmode(true);
> > "
> > 
> >   Fabrizio
> > 
> > 
> > 
> > 
> > On Mon, 18 Jun 2007, Robert Dodier wrote:
> > 
> > > On 6/18/07, Fabrizio Caruso <caruso at dm.unipi.it> wrote:
> > > 
> > > > Sorry but I don't know hot to force arrays to be local.
> > > > There must be something I am missing.
> > > >
> > > > For instance:
> > > > foo(x):= block([b],b:make_array('hashed,3),b[1]:x);
> > > >
> > > > will change b[1] after its execution.
> > > >
> > > > Moreover I would like to use things like
> > > > b[5,2,3,4] where the number of arguments is a parameter.
> > > 
> > > Fabrizio, (1) local(a) within a block saves and restores the
> > > properties (including some varieties of arrays) of a when the
> > > block is entered and exited. (2) For Maxima arrays
> > > implemented as Lisp hashtables, the number of indices is
> > > immaterial; a hash key can be a list of indices (or anything).
> > > For Maxima arrays implemented as Lisp arrays,
> > > arraymake and arrayapply might be useful.
> > > 
> > > e.g.
> > > 
> > > foo (x) := block (local (b), array (b, 5), b[1] : x, listarray (b));
> > > foo (3);
> > >   => [#####, 3, #####, #####, #####, #####]
> > > listarray (b);
> > >  => (error message, b is not an array)
> > > 
> > > bar (a, [L]) := arrayapply (a, L);
> > > bar (x, i, j);
> > >   => x[i, j]
> > > bar (x, i, j, k);
> > >   => x[i, j, k]
> > > 
> > > I'm sorry that this is confusing; various ideas about arrays,
> > > not entirely consistent, accumulated over the decades.
> > > I think now is a good time to reconsider and maybe
> > > clean up some of that stuff.
> > > 
> > > Maybe if you say more about what you're trying to accomplish
> > > we can give some advice.
> > > 
> > > FWIW
> > > Robert
> > > 
> > _______________________________________________
> > Maxima mailing list
> > Maxima at math.utexas.edu
> > http://www.math.utexas.edu/mailman/listinfo/maxima
> > 
>