4.4. Numbers and Time¶
The SELF number traits form the hierarchy shown below. (In this and subsequent hierarchy descriptions, indentation indicates that one traits object is a child of another. The prefix “traits” is omitted since these hierarchy descriptions always describe the interrelationship between traits objects. In most cases, leaf traits are concrete and have an associated prototype with the same name.)
orderedOddball
number
float
integer
smallInt
bigInt
traits number
defines behavior common to all numbers, such as successor
, succ
, predecessor
,
pred
, absoluteValue
, negate
, double
, half
, max:
, and min:
. traits number
inherits from traits orderedOddball
, so sending copy
or clone
to a number returns the
number itself. traits integer
defines behavior common to all integers such as even
, odd
, and
factorial
. There are four division operators for integers that allow the programmer to control
how the result is truncated or rounded. Integers also include behavior for iterating through a subrange,
including:
to:Do:
to:By:Do:
to:ByNegative:Do:
upTo:Do:
upTo:By:Do:
downTo:Do:
downTo:By:Do:
Relevant oddballs:
infinity
IEEE floating-point infinity
minSmallInt
smallestsmallInt
in this implementation
maxSmallInt
biggestsmallInt
in this implementation
Modules: number, float, integer, smallInt, bigInt
4.4.1. Random Numbers¶
clonable
random
randomLC
prototypes random
traits random
defines the abstract behavior of random number generators. A random number
generator can be used to generate random booleans, integers, floats, characters or strings. traits
randomLC
defines a concrete specialization based on a simple linear congruence algorithm. For
convenience, the prototype for randomLC
is “random
,” not “randomLC
”.
Modules: random
4.4.2. Time¶
clonable
time
A time object represents a date and time (to the nearest millisecond) since midnight GMT on January
1, 1970. The message current
returns a new time object containing the current time. Two
times can be compared using the standard comparison operators. One time can be subtracted from
another to produce a value in milliseconds. An offset in milliseconds can be added or subtracted
from a time object to produce a new time object. However, it is an error to add two time objects
together.
Modules: time