MathGroup Archive 1999

[Date Index] [Thread Index] [Author Index]

Search the Archive

Partial evaluation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg21094] Partial evaluation
  • From: "Kevin Jaffe" <kj0 at mailcity.com>
  • Date: Sun, 12 Dec 1999 23:52:01 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

I'm sure this is a FAQ, but I haven't found the answer.

First we define:

    In[1]:= A = {{0, 0}, {0, 0}}
    
    Out[1]= {{0, 0}, {0, 0}}
    

Then the following assignment works:

    In[2]:= Part[A, 1, 1] = 1
    
    Out[2]= 1
    
    In[3]:= A
    
    Out[3]= {{1, 0}, {0, 0}}

But this one doesn't:
    
    In[4]:= Part@@{A, 1, 1} = 2
    
    Set::write: Tag Apply in Part @@ {{{1, 0}, {0, 0}}, 1, 1} is Protected.
    
    Out[4]= 2
    
    In[5]:= A
    
    Out[5]= {{1, 0}, {0, 0}}

And this is even worse, of course:

    In[6]:= Evaluate[Part@@{A, 1, 1}] = 2
    
    Set::setraw: Cannot assign to raw object 1.
    
    Out[6]= 2
    
    In[7]:= A
    
    Out[7]= {{1, 0}, {0, 0}}

I understand the reasons for the error messages, but I don't know how
to get around the problem.  What I need is to partially evaluate the
left-hand side of In[4], but I don't know how to do this.

The reason I want to do things like "Part@@{A, 1, 1} = 2" is that I'm
trying to write a module that must modify entries in an n_1 x n_2 x
... x n_k array A of arbitrary dimension k.  I can compute the desired
multi-index v = {i_1, i_2,..., i_k} for the array without knowing the
array's dimension, but I can't figure a way to assign to the
location A[[i_1, i_2, ..., i_k]].

Is there any way to do what I'm trying to do?

Thanks!

KJ



LYCOShop is now open. On your mark, get set, SHOP!!!
http://shop.lycos.com/


  • Prev by Date: 2 coupled diff. eqns
  • Next by Date: Re: Sending test to COM1 under win98 from Mathematica
  • Previous by thread: Re: 2 coupled diff. eqns
  • Next by thread: Re: Partial evaluation