# The Ordering of Definitions

When you make a sequence of definitions in *Mathematica*, some may be more general than others. *Mathematica* follows the principle of trying to put more general definitions after more specific ones. This means that special cases of rules are typically tried before more general cases.

This behavior is crucial to the factorial function example given in "Making Definitions for Functions". Regardless of the order in which you entered them, *Mathematica* will always put the rule for the special case ahead of the rule for the general case . This means that when *Mathematica* looks for the value of an expression of the form f[n], it tries the special case first, and only if this does not apply, it tries the general case . As a result, when you ask for , *Mathematica* will keep on using the general rule until the "end condition" rule for applies.

Treatment of definitions in *Mathematica*.

If *Mathematica* did not follow the principle of putting special rules before more general ones, then the special rules would always be "shadowed" by more general ones. In the factorial example, if the rule for was ahead of the rule for , then even when *Mathematica* tried to evaluate , it would use the general rule, and it would never find the special rule.

In[1]:= |

In[2]:= |

Out[2]= |

In the factorial function example used above, it is clear which rule is more general. Often, however, there is no definite ordering in generality of the rules you give. In such cases, *Mathematica* simply tries the rules in the order you give them.

In[4]:= |

In[6]:= |

Although in many practical cases, *Mathematica* can recognize when one rule is more general than another, you should realize that this is not always possible. For example, if two rules both contain complicated conditions, it may not be possible to work out which is more general, and, in fact, there may not be a definite ordering. Whenever the appropriate ordering is not clear, *Mathematica* stores rules in the order you give them.