Skip to content
Bill Hails edited this page Dec 7, 2023 · 15 revisions

Lists are immutable. All the list operators make and return copies if necessary.

A list is written between [ and ] with commas as separators. For example:

[5 + 5, 12]; // [10, 12]

The empty list is written [] and pronounced "null".

There are a few list operators, namely:

@ (pair)

Creates a new list by prepending its lhs to its rhs (which must be a list of the same type):

12 @ [13, 14];

is [12, 13, 14], but

true @ [13, 14]

is a type error: bool != int. See Typedef for ways to create lists of mixed type.

@@ (append)

Creates a new list by making a copy of the lhs with the rhs appended:

[12, 13] @@ [14, 15]; // [12, 13, 14, 15]

@ and @@ are both right-associative.

prefix < (head)

Returns the first element of the list:

<[1, 2, 3]; // 1

prefix > (tail)

Returns all but the first element of the list:

>[1, 2, 3]; // [2, 3]

It is a run-time error to take the head or tail of an empty list.

Clone this wiki locally