Prefix

From APL Wiki
Revision as of 01:18, 2 March 2024 by Marshall (talk | contribs) (Prefix and Suffix vectors now have a page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

A prefix of a vector is another vector which is no longer than that vector, and shares all of its leading elements. In leading axis theory, an array may be considered a prefix of another array of the same rank if the same relation holds with major cells in place of elements. Consequently, a prefix is a kind of subarray. The function Take produces prefixes of its right argument as long as the left argument is non-negative and no greater than that argument's length (Tally). A vector is a prefix of another if and only if its Reverse is a suffix of that vector's reverse.

A vector is a prefix of another vector if its length is Less than or Equal to that vector's length, and every element in the prefix vector matches the corresponding element of the other vector (the one at the same index). This may be tested using Take and Match:

      isPrefix ← {((≢⍺)≤(≢⍵)) ∧ ⍺≡(≢⍺)↑⍵}
      'pre' isPrefix 'prefix'
1
      'pre' isPrefix 'suffix'
0
      'pre  ' isPrefix 'pre'
0

In leading axis theory, the frame for k-cells of an array is a prefix of that array's shape, while the cell shape is a suffix.

Iverson notation and very early APLs included the notion of a prefix vector consisting of ones followed by zeros; such a vector could be used to produce a length- prefix of a length- vector using Compress.

In Dyalog APL's Total array ordering, a prefix of another array always orders earlier than that array; this is a consequence of the principally "nothing is less than something" used as the foundation for Dyalog's TAO.