MathGroup Archive 1999

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

Search the Archive

Re: unbelievable ...

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16614] Re: unbelievable ...
  • From: "Allan Hayes" <hay at haystack.demon.co.uk>
  • Date: Fri, 19 Mar 1999 12:53:46 -0500
  • References: <7cnl3i$e6f@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

schatzi wrote in message <7cnl3i$e6f at smc.vnet.net>...
>Hello,
>
>I just came accross something that I *DO NOT* understand.
>
>Let A be a structure with two componants x and y and xA and yA functions
>that return its x and y
>componants.
>
>ClearAll[A,xA,yA]
>xA[A[x_,y_]]:=x
>yA[A[x_,y_]]:=y
>
>So far everything is fine ...
>
>{a=A[1,2],xA[a],yA[a]}
>=> {A[1,2],1,2}
>
>Now I would like to have a function which sets the x componant of a A
>symbol.
>I guess the following is not only far from the state of art, but deeply
>wrong:
>
>xASet[A[x_,y_],z_]:=(A[x,y]=A[z,y])
>
>The first use seems ok:
>
>{a,xASet[a,3],a}
>=> {A[1,2],Null,A[3,2]}
>
>But now it is impossible to reset a to A[1,2] (and only to A[1,2] !!!)
>
>{a=A[1,2],a=A[1,5]}
>=> {A[3,1],A[1,5]}
>
>
>Thank you very much for your help.
>
>
>antoine.zahnd at iprolink.ch
>


Antoine,

ClearAll["`*"]

Its all a matter of storing and calling rules:

You define a initial value for a and the function xASet

a=A[1,2];

xASet[A[x_,y_],z_]:=(A[x,y]=A[z,y])

Then you evaluate

{a,xASet[a,3],a}

{A[1,2], A[3,2], A[3,2]}

Your subsequent "odd behaviour" is related to how the last entry arises.
Let's look at the stored rules that give it.

?a
"Global`a"
a = A[1, 2]

So in fact a is still stored as A[1,2].
What your function xASet did was to add another rule that stores the value
A[3,2] for A[1,2]

?A
"Global`A"
A[1, 2] = A[3, 2]

It did not change the stored value (own value) of a.

But when the last entry in {a,xASet[a,3], a} was evaluated the steps were

a
A[1,2] (from the stored value for a)
A[3,2] ( from the stored value for A[1,2])

So, we do not need to reset a to A[1,2] - it is still set to this.

However, when we try to do this with

a=A[1,2]

the evaluation proceeds as follows

a = A]1,2]
--> a = A[3,2] ( with = the right side is evaluated before the rule is
stored)
this is stored
finally  A[3,2] is output,

We have in fact stored a as A[3,2]

?a
"Global`a"
a = A[3, 2]

When a = A[1,5] is evaluated the steps are now

a = A[1,5]
this is stored

?a
"Global`a"
a = A[1, 5]

The value that you see as output may be different form the one stored,
because of the effect of  other stored rules.

Allan

---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565





  • Prev by Date: Atan[(tan(x)^2+tan(y)^2)^0.5] - Numeric approximation
  • Next by Date: The frontEnd does not show brackets?
  • Previous by thread: unbelievable ...
  • Next by thread: Re: unbelievable ...