- Usage:
`while p list x do z`

- Consequences:
- The expression
`p`is repeatedly evaluated. As long as the result is true,`x`is evaluated and its value is saved, and`z`is evaluated and its value is discarded. When the value of`p`is false, then the loop terminates, and the list of values of`x`is returned as the value of the entire expression.

- The expression

i1 : i = 0 ; while i < 10 list i^2 do i = i+1 o2 = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81} o2 : List |

The `list x` clause may be omitted, in which case no list is accumulated, and null is returned as the value of the expression.

i3 : i = 0 ; while i < 4 do (print i; i = i+1) 0 1 2 3 |

Alternatively, the `do z` clause may be omitted.

i5 : i = 0 ; while i < 10 list (i = i+1; i^2) o6 = {1, 4, 9, 16, 25, 36, 49, 64, 81, 100} o6 : List |

Observe the use of the semicolon (see `;`) in the expression above.

If continue is executed by `x` then execution of `x` is interrupted, no value is added to the list, and iteration of the loop continues.

i7 : i = 0 ; while i < 10 list (i = i+1; if odd i then continue; i^2) o8 = {4, 16, 36, 64, 100} o8 : List |

If `continue w` is executed by `x` then execution of `x` is interrupted, the value of `w` is added to the list, and iteration of the loop continues.

i9 : i = 0 ; while i < 10 list (i = i+1; if odd i then continue 1234; i^2) o10 = {1234, 4, 1234, 16, 1234, 36, 1234, 64, 1234, 100} o10 : List |

If `break v` is executed by `x`, then the loop is stopped and `v` is returned as its value.

i11 : i = 0 ; while i < 10 list (i = i+1; if i == 5 then break i; i^2) o12 = 5 |

If break is executed by `x`, then the loop is stopped and the list accumulated so far is returned as the value.

i13 : i = 0 ; while i < 10 list (i = i+1; if i == 5 then break; i^2) o14 = {1, 4, 9, 16} o14 : List |