An array’s domain is determined by its shape, a vector of nonnegative integers such as #(4 5), #(10 1 5 8) or #(). The shape’s length is the number of array dimensions, or axes. The shape’s contents are the length of each axis.
The product of the axis lengths is the array’s size. In particular, an array with shape #() has one element.
Indexes are a vector of nonnegative integers that identify a particular element. Indexes are in-bounds when there are the same number of them as axes, and each is less than its corresponding axis length.
An array’s contents are determined by its procedure, which returns an element when applied to in-bounds indexes. By default, most arrays’ procedures look up elements in memory. Others, such as those returned by make-array, return computed values.
A pointwise operation is one that operates on each array element independently, on each corresponding pair of elements from two arrays independently, or on a corresponding collection of elements from many arrays independently. This is usually done using array-map.
When a pointwise operation is performed on arrays with different shapes, the arrays are broadcast so that their shapes match. See Broadcasting for details.