MathGroup Archive 2005

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

Search the Archive

Apply and up/down value questions

   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]


and this (after clearing x and y)

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


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

"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

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:

      RowBox[{"a1", " ", "=", " ",
        RowBox[{"Array", "[",
          RowBox[{"\[DoubleStruckR]", ",",
              RowBox[{"2", ",", "2"}], "}"}], ",",
              RowBox[{"2", ",", "4"}], "}"}]}], "]"}]}],
      ";"}], "\[IndentingNewLine]",
    RowBox[{"MatrixForm", "[", "a1", "]"}], "\[IndentingNewLine]",
      RowBox[{"a11", " ", "=", " ",
        RowBox[{"Apply", "[",
          RowBox[{"newHead", ",", "a1", ",",
            RowBox[{"{", "1", "}"}]}], "]"}]}],
      ";"}], "\[IndentingNewLine]",
    RowBox[{"MatrixForm", "[", "a11", "]"}], "\[IndentingNewLine]",
      RowBox[{"a12", " ", "=", " ",
        RowBox[{"Apply", "[",
          RowBox[{"newHead", ",", "a11", ",",
              RowBox[{"-", "2"}], "}"}]}], "]"}]}],
      ";"}], "\[IndentingNewLine]",
    RowBox[{"MatrixForm", "[", "a12", "]"}], "\[IndentingNewLine]",
      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:


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,


  • 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