Array indices are positive 32 bit integers. You can declare arrays with multiple dimensions.
Row[ 1 to 10 ] byte :10 Byte elements indexed 1 to 10 Row[ 99 ] string :100 String elements indexed from 0 to 99 Matrix[ 3, 4 ] double :20 Double precision elements in a 3 x 4 array
Array bounds can also be enumerated.
Shade[ Color{ .blue }] byte :0 up to the color blue Shade[ 1 to Color{ .blue }] byte :First color up to the color blue Shade[ Color{ * }] byte :0 up to the highest enumerated color
The lower bound is always constant and may be a constant expression. You can declare variable sizes for the upper bound for dynamic arrays and in procedure parameters.
You can declare an array with a parameterized size as a local value in a procedure. The upper bound can be an expression composed with input paramters and constants. The lower bound must still be a constant expression.
function OPERATE :Start of a procedure entry Max word :Input parameter used to size the array exit Result string :The function result is a String. local Value[ Max ] string :A dynamic array with Max + 1 elements
Declaring variable sized arrays in procedure parameters is done by specifying the upper bound as a variable name with a leading star. The variable is a passes into the procedure as a Word parameter. You reference the bound in the procedure by the name. When you pass in the array on a procedure call the value of the array bound is implicitly passed.
function SUM entry Array[ *Max ] double :Variable upper bound exit Sum double DO I = 0 to Max :Traverse the array range. Sum += Array[I] :Sum each element. - return
If the bound variable is never referenced in the procedure, omit the name and just code a star. This example could also be written more simply as:
function SUM entry Array[*] double :Variable upper bound with no name exit Sum double DO @Element in Array :Point at each element in the array. Sum += Element :Sum each element. - return