How to | Create Definitions for Variables and Functions
Mathematica has a very general notion of functions, as rules for arbitrary transformations. Values for variables are also assigned in this manner. When you set a value for a variable, the variable becomes a symbol for that value.
Here is a simple transformation rule. It says: whenever you see
x, replace it by 3:
| Out[1]= |  |
The variable
x has a value of 3.
Whenever you evaluate an expression, 3 is substituted for
x:
| Out[2]= |  |
You can remove the rule by defining a new one:
| Out[3]= |  |
The new rule says: whenever you see
x, replace it by
y^2. So far there are no rules associated with
y, so its value is itself.
| Out[4]= |  |
Now if you evaluate
x, the rule for
x says to replace
x by
y^2, and the rule for
y says to replace
y by 4, so the result is
4^2, or 16:
| Out[5]= |  |
If you change the value of
y, then the value of
x changes:
| Out[6]= |  |
| Out[7]= |  |
Now assign a value to
z, like this:
| Out[8]= |  |
Since
y has already been assigned the value 3, the rule you have defined is "replace
z by 9", not "replace
z by
y^2". So
z does not depend on
y:
| Out[9]= |  |
| Out[10]= |  |
This happened because when a rule is defined using
= (
Set), the right-hand side is evaluated before the rule is defined.
You can also define rules using
:= (
SetDelayed), like this:
When a rule is defined with
:= the right-hand side is not evaluated before the rule is defined. So even if
y already has a value, this new rule says: whenever you see
z, replace it with
y^2. So in this case,
z depends on
y:
| Out[12]= |  |
| Out[13]= |  |
| Out[14]= |  |
Functions in
Mathematica are defined by rules that act on patterns. Here is a simple one:
f[x_] is a pattern in which
x_ stands for any expression (which we represent on the right-hand side by the name
x). The rule says: if you have
f of any expression, replace it by that expression squared:
| Out[16]= |  |
| Out[17]= |  |
Here is a function with two arguments:
| Out[19]= |  |
Always use
:= to define functions, otherwise the variables on the right-hand side may not represent the associated expressions on the left-hand side, since they will be evaluated before the rule is defined:
| Out[20]= |  |
That happened because
x is 9 and
y is 3. This rule says that anything matching the pattern
h[x_, y_] is replaced by 90:
| Out[21]= |  |