"Abstraction of _ordinal types_, that is, of types where
each instance has a [[successor]] and [[predecessor]], such
as:
- types which represent or are isomorphic to the
mathematical integers, for example, [[Integer]] and other
[[Integral]] numeric types, and even [[Character]], along
with
- enumerated types which are isomorphic to the mathematical
integers under modular arithmetic, for example, the days
of the week, and
- enumerated types which are isomorphic to a bounded range
of integers, for example, a list of priorities.
The _increment_ operator `++` and _decrement_ operator `--`
are defined for all types which satisfy `Ordinal`.
function increment() {
count++;
}
Many ordinal types have a [[total order|Comparable]]. If an
ordinal type has a total order, then it should satisfy:
- `x.successor >= x`, and
- `x.predecessor <= x`.
An ordinal enumerated type `X` with a total order has
well-defined `maximum` and `minimum` values where
`minimum<x<maximum` for any other instance `x` of `X`.
Then the `successor` and `predecessor` operations should
satisfy:
- `minimum.predecessor==minimum`, and
- `maximum.successor==maximum`."
see (`class Character`,
`class Integer`,
`interface Integral`,
`interface Comparable`,
`interface Enumerable`)
by ("Gavin")
tagged("Numbers")
shared interface Ordinal<out Other> of Other
given Other satisfies Ordinal<Other> {
"The successor of this value."
shared formal Other successor;
"The predecessor of this value."
shared formal Other predecessor;
}