*x*`(`*index1, index2, ..., indexN *`)` is a
subarray of the array *x*

Each index corresponds to one dimension of the *x* array, called
the **ID** in this section (the two exceptions are noted below). The
*index1
*varies
fastest, *index2 *next fastest, and so on. By default, Yorick indices
are 1-origin. An *indexI *may specify multiple index values, in which
case the result array will have one or more dimensions which correspond
to the **ID** of
*x*. Possibilities for the *indexI* are:

- scalar index
- Select one index. No result dimension will correspond to
**ID**. - nil (
`[]`or omitted) - One result dimension will match the
**ID**. - index range
`start:stop`or`start:stop:step` - Select
`start`,`start+step`,`start+2*step`, etc. One result dimension of length`1+(stop-start)/step`and origin 1 will correspond to**ID**. The default`step`is 1; it may be negative. In particular,`::-1`reverses the order of**ID**. - index list
- Select an arbitrary list of indices - the index list can be any array
of integers. The dimensions of the index list will replace the
**ID**in the result. - pseudo-index
`-` - Insert a unit length dimension in the result which was not present
in the original array
*x*. There is no**ID**for a`-`index. - rubber-index
`..`or`*` - The
**ID**may be zero or more dimensions of*x*, forcing it indexN to be the final actual index of*x*. A`..`preserves the actual indices,`*`collapses them to a single index. - range function
*ifunc*or*ifunc*:range - Apply a range function to all or a subset of the
**ID**; the other dimensions are ``spectators''; multiple*ifunc*are performed successively from left to right. Index Range Functions gives a complete list of range functions.

Function results and expressions may be indexed directly, e.g.:

*f*`(`*a,b,c*`)(`*index1,index2*`)`
or `(`2*x+1`)(`*index1,index2,index3*`)`

If the left hand operand of the `=` operator is an indexed array,
the right hand side is converted to the type of the left, and the specified
array elements are replaced. Do not confuse this with the redefinition
operation *var*` =`:

*x*`(`*index1, index2, ..., indexN *`)=` *expr*
assign to a subarray of *x*

- Language Reference
- Starting and Quitting Yorick
- Getting Help
- Error Recovery
- Array Data Types
- Constants
- Defining Variables
- Arithmetic and Comparison Operators
- Logical Operators
- Creating Arrays
- Indexing Arrays
- Array Conformability Rules
- Calling Functions
- Defining Functions
- Variable Scope
- Returning from Functions
- Compound Statements
- Conditional Execution
- Loops

- Function Reference
- I/O Reference