Slicing refers to extracting a sub-array corresponding to an interval of indices, as defined in Integer grids.
The special value
∎ : ℕ.nz
stands for the last index of the array. The interval spanning all array elements would thus be written
1 ⋯ ∎
A slice is extracted by using an interval or grid as a subscript:
s:𝕊, (Array1D(s))[ℕ.nz⧺ℕ.nz⧺ℕ.nz] : Array1D(s)
For array terms, the slice is computed in Pharo code:
s_:𝕊, A:Array1D(s_), i:ℕ.nz, j:ℕ.nz, A[i ⋯ j] ⇒ Pharo:"A ensureArrayTerm. i ensureNumber. j ensureNumber. A slice: i to: j by: 1"
s_:𝕊, A:Array1D(s_), i:ℕ.nz, j:ℕ.nz, k:ℕ.nz, A[i ⧺ k ⧺ j] ⇒ Pharo:"A ensureArrayTerm. i ensureNumber. j ensureNumber. k ensureNumber. A slice: i to: j by: k"
For the special case of a slice to the end:
s_:𝕊, A:Array1D(s_), i:ℕ.nz, A[i ⋯ ∎] ⇒ Pharo:"A ensureArrayTerm. i ensureNumber. A sliceToEndFrom: i by: 1"
s_:𝕊, A:Array1D(s_), i:ℕ.nz, k:ℕ.nz, A[i ⧺ k ⧺ ∎] ⇒ Pharo:"A ensureArrayTerm. i ensureNumber. k ensureNumber. A sliceToEndFrom: i by: k"
For a literal array:
{[1, 4, 9, 16, 25, 36]}[2 ⋯ 3] ⇒ {[4, 9]}
{[1, 4, 9, 16, 25, 36]}[3 ⋯ ∎] ⇒ {[9, 16, 25, 36]}
{[1, 4, 9, 16, 25, 36]}[1 ⧺ 2 ⧺ 5] ⇒ {[1, 9, 25]}
{[1, 4, 9, 16, 25, 36]}[2 ⧺ 2 ⧺ ∎] ⇒ {[4, 16, 36]}