From 85878912035fd3fb3582db60ef1fc06b459fe67a Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Thu, 15 Jul 2021 08:35:30 -0400 Subject: Rename self-comparison to self-search --- docs/doc/indices.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs/doc/indices.html') diff --git a/docs/doc/indices.html b/docs/doc/indices.html index 42938172..7f342cca 100644 --- a/docs/doc/indices.html +++ b/docs/doc/indices.html @@ -92,7 +92,7 @@

Unlike / and , and do use list element indices. For this is because the output format can be controlled by the argument format: if passed a single number, the result uses atomic indices (so it's a numeric list); if passed a list, it uses list indices and the result has depth 2 (the result depth is always one greater than the argument depth). For , list indices are chosen because Select () handles atomic indices well already. When selecting multiple elements from a list, they would typically have to be placed in an array, which is equivalent to with a numeric list 𝕨. An atom 𝕨 in Pick is converted to a list, so it can be used to select a single element if only one is wanted. To select multiple elements, uses each depth-1 array in 𝕨 as an index and replaces it with that element from the right argument. Because this uses elements as elements (not cells), it is impossible to have conformability errors where elements do not fit together (invalid index errors are of course still possible). Atoms also cannot be used in this context, as it would create ambiguity: is a one-element list an index, or does it contain an index?

Major cell indices

One of the successes of the leading axis model is to introduce a kind of index for multidimensional arrays that is easier to work with than list indices. The model introduces cells, where a cell index is a list of any length up to the containing array's rank. General cell indices are discussed in the next section; first we introduce a special case, indices into major cells or ¯1-cells. These cells naturally form a list, so the index of a major cell is a single number. Such an index can also be considered to select along the first axis, since an index along any axis is a single number.

-

Ordering functions ⍋⍒ and search/self-comparison functions ⊐⊒ that depend on cell ordering only really make sense with major cell indices: while other indices have an ordering, it's not very natural. Note that only uses the ordering in an incidental way, because it's defined to return the first index where a cell in 𝕩 is found. A mathematician would be more interested in a "pre-image" function that returns the set of all indices where a particular value appears. However, programming usefulness and consistency with the other search functions makes searching for the first index a reasonable choice.

+

Ordering functions ⍋⍒ and search/self-search functions ⊐⊒ that depend on cell ordering only really make sense with major cell indices: while other indices have an ordering, it's not very natural. Note that only uses the ordering in an incidental way, because it's defined to return the first index where a cell in 𝕩 is found. A mathematician would be more interested in a "pre-image" function that returns the set of all indices where a particular value appears. However, programming usefulness and consistency with the other search functions makes searching for the first index a reasonable choice.

Only one other function—but an important one!—deals with cells rather than elements: Select (). Select allows either a simple first-axis case where 𝕨 has depth 1 or less (a depth-0 argument is automatically enclosed), and a multi-axis case where it is a list of depth-1 elements. In each case the depth-1 arrays index along a single axis.

General cell indices

BQN does not use general cell indices directly, but it is useful to consider how they might work, and how a programmer might implement functions that use them in BQN if needed. The functions /, , and are the ones that can work with indices for multidimensional arrays but don't already. Here we will examine how multidimensional versions would work.

-- cgit v1.2.3