This is documentation for Mathematica 6, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)

Making Definitions for Functions

"Defining Functions" discussed how you can define functions in Mathematica. In a typical case, you would type in f[x_]=x^2 to define a function f. (Actually, the definitions in "Defining Functions" used the := operator, rather than the = one. "Immediate and Delayed Definitions" will explain exactly when to use each of the := and = operators.)
The definition f[x_]=x^2 specifies that whenever Mathematica encounters an expression which matches the pattern f[x_], it should replace the expression by x^2. Since the pattern f[x_] matches all expressions of the form f[anything], the definition applies to functions f with any "argument".
Function definitions like f[x_]=x^2 can be compared with definitions like f[a]=b for indexed variables discussed in "Making Definitions for Indexed Objects". The definition f[a]=b specifies that whenever the particular expression f[a] occurs, it is to be replaced by b. But the definition says nothing about expressions such as f[y], where f appears with another "index".
To define a "function", you need to specify values for expressions of the form f[x], where the argument x can be anything. You can do this by giving a definition for the pattern f[x_], where the pattern object x_ stands for any expression.
f[x]=valuedefinition for a specific expression x
f[x_]=valuedefinition for any expression, referred to as x

The difference between defining an indexed variable and a function.

Making definitions for f[2] or f[a] can be thought of as being like giving values to various elements of an "array" named f. Making a definition for f[x_] is like giving a value for a set of "array elements" with arbitrary "indices". In fact, you can actually think of any function as being like an array with an arbitrarily variable index.
In mathematical terms, you can think of f as a mapping. When you define values for, say, f[1] and f[2], you specify the image of this mapping for various discrete points in its domain. Defining a value for f[x_] specifies the image of f on a continuum of points.
This defines a transformation rule for the specific expression f[x].
Click for copyable input
When the specific expression f[x] appears, it is replaced by u. Other expressions of the form f[argument] are, however, not modified.
Click for copyable input
This defines a value for f with any expression as an "argument".
Click for copyable input
The old definition for the specific expression f[x] is still used, but the new general definition for f[x_] is now used to find a value for f[y].
Click for copyable input
This removes all definitions for f.
Click for copyable input
Mathematica allows you to define transformation rules for any expression or pattern. You can mix definitions for specific expressions such as f[1] or f[a] with definitions for patterns such as f[x_].
Many kinds of mathematical functions can be set up by mixing specific and general definitions in Mathematica. As an example, consider the factorial function. This particular function is in fact built into Mathematica (it is written n!). But you can use Mathematica definitions to set up the function for yourself.
The standard mathematical definition for the factorial function can be entered almost directly into Mathematica, in the form: f[n_]:=n f[n-1];f[1]=1. This definition specifies that for any n, f[n] should be replaced by n f[n-1], except that when n is 1, f[1] should simply be replaced by 1.
Here is the value of the factorial function with argument 1.
Click for copyable input
Here is the general recursion relation for the factorial function.
Click for copyable input
Now you can use these definitions to find values for the factorial function.
Click for copyable input
The results are the same as you get from the built-in version of factorial.
Click for copyable input