1 | \chapter{Introduction} |
---|
2 | |
---|
3 | Naming values is a common practice in mathematics and engineering, \eg $\pi$, $\tau$ (2$\pi$), $\phi$ (golden ratio), MHz (1E6), etc. |
---|
4 | Naming is also commonly used to represent many other numerical phenomenon, such as days of the week, months of a year, floors of a building (basement), specific times (noon, New Years). |
---|
5 | Many programming languages capture this important software engineering capability through a mechanism called an \Newterm{enumeration}. |
---|
6 | An enumeration is similar to other programming-language types by providing a set of constrained values, but adds the ability to name \emph{all} the values in its set. |
---|
7 | Note, all enumeration names must be unique but different names can represent the same value (eight note, quaver), which are synonyms. |
---|
8 | |
---|
9 | Specifically, an enumerated type restricts its values to a fixed set of named constants. |
---|
10 | While all types are restricted to a fixed set of values because of the underlying von Neumann architecture, and hence, to a corresponding set of constants, \eg @3@, @3.5@, @3.5+2.1i@, @'c'@, @"abc"@, etc., these values are not named, other than the programming-language supplied constant names. |
---|
11 | |
---|
12 | Fundamentally, all enumeration systems have an \Newterm{enumeration} type with an associated set of \Newterm{enumerator} names. |
---|
13 | An enumeration has three universal attributes, \Newterm{position}, \Newterm{label}, and \Newterm{value}, as shown by this representative enumeration, where position and value can be different. |
---|
14 | \begin{cquote} |
---|
15 | \small\sf\setlength{\tabcolsep}{3pt} |
---|
16 | \begin{tabular}{rccccccccccc} |
---|
17 | \it\color{red}enumeration & \multicolumn{7}{c}{\it\color{red}enumerators} \\ |
---|
18 | $\downarrow$\hspace*{25pt} & \multicolumn{7}{c}{$\downarrow$} \\ |
---|
19 | @enum@ Weekday \{ & Monday, & Tuesday, & Wednesday, & Thursday,& Friday, & Saturday, & Sunday \}; \\ |
---|
20 | \it\color{red}position & 0 & 1 & 2 & 3 & 4 & 5 & 6 \\ |
---|
21 | \it\color{red}label & Monday & Tuesday & Wednesday & Thursday & Friday & Saturday & Sunday \\ |
---|
22 | \it\color{red}value & 0 & 1 & 2 & 3 & 4 & 5 & 6 |
---|
23 | \end{tabular} |
---|
24 | \end{cquote} |
---|
25 | Here, the \Newterm{enumeration} @Weekday@ defines the ordered \Newterm{enumerator}s @Monday@, @Tuesday@, @Wednesday@, @Thursday@, @Friday@, @Saturday@ and @Sunday@. |
---|
26 | By convention, the successor of @Tuesday@ is @Monday@ and the predecessor of @Tuesday@ is @Wednesday@, independent of the associated enumerator constant values. |
---|
27 | Because an enumerator is a constant, it cannot appear in a mutable context, \eg @Mon = Sun@ is meaningless, and an enumerator has no address, it is an \Newterm{rvalue}\footnote{ |
---|
28 | The term rvalue defines an expression that can only appear on the right-hand side of an assignment.}. |
---|
29 | |
---|
30 | \section{Contributions} |
---|