In this class, we use mathematical notation for sequences, sets and tables (mappings) in the code that will be given in class and in the lecture notes. The notation has a natural translation to our SML library. Here is the translation for sequences.

Sequence Notation | Equivalent SML with `SEQUENCE` library |

\[S_i\] | `nth S i` |

\[|S|\] | `length S` |

\[\langle \; \rangle\] | `empty()` |

\[\langle v \rangle\] | `singleton v` |

\[\langle i, \ldots, j \rangle\] | `tabulate (fn k => i + k) (j - i + 1)` |

\[S \langle i, \ldots, j \rangle\] | `subseq S (i, j - i + 1)` |

\[\langle e : p \in S \rangle\] | `map (fn p => e) S` |

\[\langle e : 0 \leq i < n \rangle\] | `tabulate (fn i => e)` |

\[\langle p \in S \;|\; e \rangle\] | `filter (fn p => e) S` |

\[\langle e_1 : p \in S \;|\; e_2\rangle\] | `map (fn p => e1) (filter (fn p => e2) S)` |

\[\langle e : p_1 \in S_1,\; p_2 \in S_2 \rangle\] | `flatten(map (fn p1 => map (fn p2 => e) S2) S1)` |

\[\langle e : 0 \leq i < n,\; 0 \leq j < i \rangle\] | `flatten(tabulate (fn i => tabulate (fn j => e) i) n)` |

\[\sum_{p \in S} e\] | `reduce add 0 (map (fn p => e) S)` |

\[\sum_{i = k}^n e\] | `reduce add 0 (map (fn i => e)` $\langle k, \ldots, n\rangle$`)` |

The meaning of `add`

and `0`

in the
`reduce`

will depend on the type (e.g. `Int.+`

and
`0`

for integers or `Real.+`

and `0.0`

for
reals). Also the $\sum$ can be replaced with $\min$, $\max$, $\cup$ and
$\cap$ with the presumed meanings. For example \[\bigcup_{p \in S} e\]
translates to: `reduce Set.union Set.empty (map (fn p => e) S)`

.

A listing that includes sets and tables can be found here.