Am 25.11.2010 11:57, schrieb Sam Takoy:
> Hi,
>
> The following code:
>
> i[_] = 0;
> i[1]++
> i[1]++
> i[1]++
> i[1]++
>
>
> return 0 1 2 3 4. I'd like to understand whats going on here. That is,
>
> What is i? Is it a function?
it is a symbol. Depending on what kind of global definitions
(substitution rules) you define for i, it will rather behave as a
variable or a function or ...
> And what is i[1]? Is it a function or a value? Etc...
i[1] is an expression, as everything in Mathematica :-). Depending on
whether you have defined DownValues for i and what kind of DownValues
you have defined it will evaluate to a new expression. If it is part of
a more complex expression also the UpValues or SubValues might influence
the evaluation.
I think the mystery here lies in the ++ which is short for Increment.
Increment has the Attribute HoldFirst, which changes the standard
evaluation procedure in such a way that Increment sees the unevaluated
expression that it gets as the first argument. It is then the code in
Increment that obviously is smart enough to handle the i[1] in a way
that one most probably wants when using i[1]++ (or what the responsible
WRI developer thought one would expect). I think it is not something
that is built into the Mathematica language (other than that Increment
is a system function) and could be understood by explaining more about
what i[1] actually is.
hth,
albert