       Apply and up/down value questions

• To: mathgroup at smc.vnet.net
• Subject: [mg61533] Apply and up/down value questions
• From: "Matt" <anonmous69 at netscape.net>
• Date: Sat, 22 Oct 2005 00:35:18 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```Hello,
Again, I'm working my way through some of the programming examples
in Michael Trott's Programming Guidebook, and there's behaviour that I
cannot figure out.  I've been over and over section A.5.2 and 2.5.10 in
the Mathematica Book, but I still don't understand up values when
applied to functions with more than one argument.  Also, I had a
question about level specification, which I couldn't figure out even
after looking at section A.3.6.  Any help is appreciated.  First the
upvalue questions:

I don't understand the point of using TagSet as opposed to UpSet:
e.g. in Michael Trott's Programming Guidebook on page 318 he states:
"For functions with several arguments, the information can be
associated with a certain prescribed argument rather than with all
arguments at the first level."  However, I don't see any difference in
functionality between this:

x /: Plus[x, y_] = y;
Plus[x, 7]

??x
??y

and this (after clearing x and y)

Plus[x, y_] ^:= y
Plus[x, 7]

??x
??y

Also, I'm stumped on this particular wording in the TagSet
documentation:

"If f appears several times in lhs, then f/: lhs = rhs associates the
assignment with each occurrence"

What does this really mean?

As regards Apply:

Is it true that Apply[newHead, expr, 1] and Apply[newHead, expr, {1}]
will always be the same result given that the other two arguments are
identical?

By definition, a level specification of n applies to levels 1 through
n.  I have found that if I do something like Apply[newHead, expr, -2],
that what I actually end up with seems to be equivalent to newExpr =
Apply[newHead, expr, {1}] followed by Apply[newHead, newExpr, {-2}].
Here is an example:

Cell[BoxData[{
RowBox[{
RowBox[{"a1", " ", "=", " ",
RowBox[{"Array", "[",
RowBox[{"\[DoubleStruckR]", ",",
RowBox[{"{",
RowBox[{"2", ",", "2"}], "}"}], ",",
RowBox[{"{",
RowBox[{"2", ",", "4"}], "}"}]}], "]"}]}],
";"}], "\[IndentingNewLine]",
RowBox[{"MatrixForm", "[", "a1", "]"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"a11", " ", "=", " ",
RowBox[{"Apply", "[",
RowBox[{"newHead", ",", "a1", ",",
RowBox[{"{", "1", "}"}]}], "]"}]}],
";"}], "\[IndentingNewLine]",
RowBox[{"MatrixForm", "[", "a11", "]"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"a12", " ", "=", " ",
RowBox[{"Apply", "[",
RowBox[{"newHead", ",", "a11", ",",
RowBox[{"{",
RowBox[{"-", "2"}], "}"}]}], "]"}]}],
";"}], "\[IndentingNewLine]",
RowBox[{"MatrixForm", "[", "a12", "]"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"a13", " ", "=", " ",
RowBox[{"Apply", "[",
RowBox[{"newHead", ",", " ", "a1", ",", " ",
RowBox[{"-", "2"}]}], "]"}]}],
";"}], "\[IndentingNewLine]",
RowBox[{"MatrixForm", "[", "a13", "]"}]}], "Input"]

What is the general rule, or am I just misusing the level specification
in Apply?

And finally, a question on modified built in functions:

In Michael Trott's Programming Guidebook, on page 311, he uses the
following construct to remove a downvalue that had been specified for
the Cos and Sin functions:

Unprotect[Cos];
Clear[Cos];
Protect[Cos];
{Cos}

I've noticed that if I omit the last line (i.e. {Cos}), that it still
works.  What is the point of the last line?

Thanks very much,

Matt

```

• Prev by Date: aggregation of related elements in a list
• Next by Date: Re: refer to the result of FindRoot[ ]
• Previous by thread: Re: Re: aggregation of related elements in a list
• Next by thread: Re: Apply and up/down value questions