# How to | Create Definitions for Variables and Functions

The Wolfram Language 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:

 In[1]:=
 Out[1]=

The variable x has a value of 3.

Whenever you evaluate an expression, 3 is substituted for x:

 In[2]:=
 Out[2]=

You can remove the rule by defining a new one:

 In[3]:=
 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.

Assign a value to y:

 In[4]:=
 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:

 In[5]:=
 Out[5]=

If you change the value of y, then the value of x changes:

 In[6]:=
 Out[6]=
 In[7]:=
 Out[7]=

Now assign a value to z, like this:

 In[8]:=
 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:

 In[9]:=
 Out[9]=
 In[10]:=
 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:

 In[11]:=

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:

 In[12]:=
 Out[12]=
 In[13]:=
 Out[13]=
 In[14]:=
 Out[14]=

Functions in the Wolfram Language are defined by rules that act on patterns. Here is a simple one:

 In[15]:=

f[x_] is a pattern in which x_ stands for any expression (which is represented 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:

 In[16]:=
 Out[16]=
 In[17]:=
 Out[17]=

Here is a function with two arguments:

 In[18]:=
 In[19]:=
 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:

 In[20]:=
 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:

 In[21]:=
 Out[21]=