# Evaluation in Iteration Functions

The built-in *Mathematica* iteration functions such as Table and Sum evaluate their arguments in a slightly special way.

When evaluating an expression like Table[f, {i, i_{max}}], the first step, as discussed in "Blocks and Local Values", is to make the value of i local. Next, the limit in the iterator specification is evaluated. The expression f is maintained in an unevaluated form, but is repeatedly evaluated as a succession of values are assigned to i. When this is finished, the global value of i is restored.

The function

RandomReal[] is evaluated four separate times here, so four different pseudorandom numbers are generated.

Out[1]= | |

This evaluates

RandomReal[] before feeding it to

Table. The result is a list of four identical numbers.

Out[2]= | |

In most cases, it is convenient for the function f in an expression like Table[f, {i, i_{max}}] to be maintained in an unevaluated form until specific values have been assigned to . This is true in particular if a complete symbolic form for f valid for any i cannot be found.

This defines

to give the factorial when it has an integer argument, and to give

(standing for "Not a Number") otherwise.

In this form,

is not evaluated until an explicit integer value has been assigned to

.

Out[4]= | |

Using

Evaluate forces

to be evaluated with

left as a symbolic object.

Out[5]= | |

In cases where a complete symbolic form for f with arbitrary i in expressions such as Table[f, {i, i_{max}}] *can* be found, it is often more efficient to compute this form first, and then feed it to Table. You can do this using Table[Evaluate[f], {i, i_{max}}].

The

Sum in this case is evaluated separately for each value of

.

Out[6]= | |

It is however possible to get a symbolic formula for the sum, valid for any value of

.

Out[7]= | |

By inserting

Evaluate, you tell

*Mathematica* first to evaluate the sum symbolically, then to iterate over

.

Out[8]= | |

Table[f,{i,i_{max}}] | keep f unevaluated until specific values are assigned to i |

Table[Evaluate[f],{i,i_{max}}] | evaluate f first with i left symbolic |

Evaluation in iteration functions.