Re: EUREKA Re: Types in Mathematica, a practical example
- To: mathgroup at smc.vnet.net
- Subject: [mg63188] Re: EUREKA Re: [mg62800] Types in Mathematica, a practical example
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sat, 17 Dec 2005 03:46:20 -0500 (EST)
- References: <43A1787000069CF6@pne-smtpout2-sn2.hy.skanova.net> (added by postmaster@pne.skanova.net)
- Sender: owner-wri-mathgroup at wolfram.com
On 17 Dec 2005, at 02:26, Ingolf Dahl wrote:
>
>
> My suggestion to define a 2x2 list of undefined elements is the
> following:
>
> x = {{HoldForm[x[[1,1]]], HoldForm[x[[1,2]]]}, {HoldForm[x[[2,1]]],
> HoldForm[x[[2,2]]]}};
You really do love this typing business ;-) Why not:
In[1]:=
x = Array[HoldForm[x[[##1]]] & ,
{2, 2}]
Out[1]=
{{HoldForm[x[[1,1]]],
HoldForm[x[[1,2]]]},
{HoldForm[x[[2,1]]],
HoldForm[x[[2,2]]]}}
>
> Occasionally, when you have defined some of the undefined elements,
> you may
> convert to Input Form or have to apply ReleaseHold or
> ReplaceAll[#,HoldForm[Part[a__]]:>Part[a]]& @ to get rid of the
> invisible
> HoldForm surrounding the indexed elements. For Set and SetDelayed
> you can
> get this automatically by the command
Hm... have you really tried it:
ReplaceAll[#,HoldForm[Part[a__]]:>Part[a]]& @x
{{HoldForm[x[[1,1]]],
HoldForm[x[[1,2]]]},
{3, HoldForm[x[[2,2]]]}}
>
> Unprotect[HoldForm]; HoldForm /: Set[ HoldForm[ Part[a__]],b_]:= Set[
> Part[a],b]; HoldForm /: SetDelayed[ HoldForm[ Part[a__]],b_]:=
> SetDelayed[
> Part[a],b];
> Protect[HoldForm];
Since I consider redefining basic built in functions as "unnecessary
evil" I will stop at this. Personally I just can't see any point in
all of this but of course this is just a personal opinion. Those who
like or imagine it could be useful it can pursue this further.
However, there is just one more thing to deal with:
> ___________________________________________________________
> When I played with this, I came across the following:
>
> Assume, that the value of axxx is not defined. Then
>
> Hold[Part[axxx, 57, 62]] /. {axxx -> b}
>
> returns
>
> Hold[b[[57,62]]]
>
> but if we first assign any value to axxx, e.g. Indeterminate, we
> instead
> obtain
>
> Hold[axxx[[57,62]]]
>
> Can someone explain?
This is pretty obvious and I am sure you can explain it yourself.
However, since you asked ..
If aaax has the value Intermediate then in
ReplaceAll[Hold[Part[axxx, 57, 62]], {Rule[axxx, b]}]
the second argument evaluates to Intermediate->b, so all you are
doing is evaluating:
Hold[Part[axxx, 57, 62]] /. {Intermediate -> b}
Use instead
Hold[axxx[[57,62]]] /.
{HoldPattern[axxx] -> b}
Hold[b[[57,62]]]
>
> And I wish everybody A Merry Christmas and A Happy New Year!
>
I fully agree with this!
Andrzej Kozlowski