aboutsummaryrefslogtreecommitdiff
path: root/docs/doc/windows.html
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-07-18 18:26:52 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-07-18 18:29:59 -0400
commit229e2cd2f5c78b13c483a8559dead2c8f31d8e42 (patch)
tree9d6a1ff0100bda7632948987352b3d6614c3eeb5 /docs/doc/windows.html
parent010b97c8cf346dfeafc289ae66f77e8c61cd9865 (diff)
Terminology changes: subject, 1/2-modifier, Box/Unbox to Enclose/Merge, blocks
Diffstat (limited to 'docs/doc/windows.html')
-rw-r--r--docs/doc/windows.html18
1 files changed, 9 insertions, 9 deletions
diff --git a/docs/doc/windows.html b/docs/doc/windows.html
index 117acc08..27b9be00 100644
--- a/docs/doc/windows.html
+++ b/docs/doc/windows.html
@@ -1,6 +1,6 @@
<head><link href="../style.css" rel="stylesheet"/></head>
<h1 id="windows">Windows</h1>
-<p>In BQN, it's strongly preferred to use functions, and not operators (modifiers and compositions), for array manipulation. Functions are simpler as they have fewer moving parts. They are more concrete, since the array results can always be viewed right away. They are easier to implement with reasonable performance as well, since there is no need to recognize many possible function operands as special cases.</p>
+<p>In BQN, it's strongly preferred to use functions, and not modifiers, for array manipulation. Functions are simpler as they have fewer moving parts. They are more concrete, since the array results can always be viewed right away. They are easier to implement with reasonable performance as well, since there is no need to recognize many possible function operands as special cases.</p>
<p>The Window function replaces APL's Windowed Reduction, J's more general Infix operator, and Dyalog's Stencil, which is adapted from one case of J's Cut operator.</p>
<h2 id="definition">Definition</h2>
<p>We'll start with the one-axis case. Here Window's left argument is a number between <code><span class='Number'>0</span></code> and <code><span class='Number'>1</span><span class='Function'>+β‰ </span><span class='Value'>𝕩</span></code>. The result is composed of slices of <code><span class='Value'>𝕩</span></code> (contiguous sections of major cells) with length <code><span class='Value'>𝕨</span></code>, starting at each possible index in order.</p>
@@ -18,10 +18,10 @@
<span class='Number'>5</span><span class='Function'>↑</span><span class='Number'>2</span><span class='Function'>↓</span><span class='String'>&quot;abcdefg&quot;</span>
<span class='Value'>[</span> <span class='Value'>cdefg</span> <span class='Value'>]</span>
</pre>
-<p>Windows differs from Prefixes and Suffixes in that it doesn't add a layer of nesting (it doesn't box each slice). This is possible because the slices have a fixed size.</p>
+<p>Windows differs from Prefixes and Suffixes in that it doesn't add a layer of nesting (it doesn't enclose each slice). This is possible because the slices have a fixed size.</p>
<h3 id="multiple-dimensions">Multiple dimensions</h3>
-<p>The above description applies to a higher-rank right argument. As an example, we'll look at two-row slices of a shape <code><span class='Number'>3</span><span class='Ligature'>β€Ώ</span><span class='Number'>4</span></code> array. For convenience, we will box each slice. Note that slices always have the same rank as the argument array.</p>
-<pre> <span class='Function'>&lt;</span><span class='Composition'>βŽ‰</span><span class='Number'>2</span> <span class='Number'>2</span><span class='Function'>↕</span><span class='String'>&quot;0123&quot;</span><span class='Function'>∾</span><span class='String'>&quot;abcd&quot;</span><span class='Function'>≍</span><span class='String'>&quot;ABCD&quot;</span>
+<p>The above description applies to a higher-rank right argument. As an example, we'll look at two-row slices of a shape <code><span class='Number'>3</span><span class='Ligature'>β€Ώ</span><span class='Number'>4</span></code> array. For convenience, we will enclose each slice. Note that slices always have the same rank as the argument array.</p>
+<pre> <span class='Function'>&lt;</span><span class='Modifier2'>βŽ‰</span><span class='Number'>2</span> <span class='Number'>2</span><span class='Function'>↕</span><span class='String'>&quot;0123&quot;</span><span class='Function'>∾</span><span class='String'>&quot;abcd&quot;</span><span class='Function'>≍</span><span class='String'>&quot;ABCD&quot;</span>
<span class='Value'>β”Œ</span>
<span class='Value'>β”Œ</span> <span class='Value'>β”Œ</span>
<span class='Number'>0123</span> <span class='Value'>abcd</span>
@@ -30,7 +30,7 @@
<span class='Value'>β”˜</span>
</pre>
<p>Passing a list as the left argument to Windows takes slices along any number of leading axes. Here are all the shape <code><span class='Number'>2</span><span class='Ligature'>β€Ώ</span><span class='Number'>2</span></code> slices:</p>
-<pre> <span class='Function'>&lt;</span><span class='Composition'>βŽ‰</span><span class='Number'>2</span> <span class='Number'>2</span><span class='Ligature'>β€Ώ</span><span class='Number'>2</span><span class='Function'>↕</span><span class='String'>&quot;0123&quot;</span><span class='Function'>∾</span><span class='String'>&quot;abcd&quot;</span><span class='Function'>≍</span><span class='String'>&quot;ABCD&quot;</span>
+<pre> <span class='Function'>&lt;</span><span class='Modifier2'>βŽ‰</span><span class='Number'>2</span> <span class='Number'>2</span><span class='Ligature'>β€Ώ</span><span class='Number'>2</span><span class='Function'>↕</span><span class='String'>&quot;0123&quot;</span><span class='Function'>∾</span><span class='String'>&quot;abcd&quot;</span><span class='Function'>≍</span><span class='String'>&quot;ABCD&quot;</span>
<span class='Value'>β”Œ</span>
<span class='Value'>β”Œ</span> <span class='Value'>β”Œ</span> <span class='Value'>β”Œ</span>
<span class='Number'>01</span> <span class='Number'>12</span> <span class='Number'>23</span>
@@ -45,8 +45,8 @@
<p>The slices are naturally arranged along multiple dimensions according to their starting index. Once again the equivalence <code><span class='Value'>i</span><span class='Function'>⊏</span><span class='Value'>l</span><span class='Function'>↕</span><span class='Value'>x</span></code> ←→ <code><span class='Value'>l</span><span class='Function'>↑</span><span class='Value'>i</span><span class='Function'>↓</span><span class='Value'>x</span></code> holds, provided <code><span class='Value'>i</span></code> and <code><span class='Value'>l</span></code> have the same length.</p>
<p>If the left argument has length <code><span class='Number'>0</span></code>, then the argument is not sliced along any dimensions. The only slice that resultsβ€”the entire argumentβ€”is then arranged along an additional zero dimensions. In the end, the result is the same as the argument.</p>
<h3 id="more-formally">More formally</h3>
-<p><code><span class='Value'>𝕩</span></code> is an array. <code><span class='Value'>𝕨</span></code> is a number or numeric list or scalar with <code><span class='Value'>𝕨</span><span class='Function'>≀</span><span class='Composition'>β—‹</span><span class='Function'>β‰ β‰’</span><span class='Value'>𝕩</span></code>. The result <code><span class='Value'>z</span></code> has shape <code><span class='Value'>𝕨</span><span class='Function'>∾¬</span><span class='Composition'>⟜</span><span class='Value'>𝕨</span><span class='Composition'>⌾</span><span class='Paren'>((</span><span class='Function'>β‰ </span><span class='Value'>𝕨</span><span class='Paren'>)</span><span class='Composition'>⊸</span><span class='Function'>↑</span><span class='Paren'>)</span><span class='Function'>β‰’</span><span class='Value'>𝕩</span></code>, and element <code><span class='Value'>i</span><span class='Function'>βŠ‘</span><span class='Value'>z</span></code> is <code><span class='Value'>𝕩</span><span class='Function'>βŠ‘</span><span class='Modifier'>˜</span><span class='Paren'>(</span><span class='Function'>β‰ </span><span class='Value'>𝕨</span><span class='Paren'>)(</span><span class='Function'>↑+</span><span class='Composition'>⌾</span><span class='Paren'>((</span><span class='Function'>β‰ </span><span class='Value'>𝕨</span><span class='Paren'>)</span><span class='Composition'>⊸</span><span class='Function'>↑</span><span class='Paren'>)</span><span class='Function'>↓</span><span class='Paren'>)</span><span class='Value'>i</span></code>.</p>
-<p>Using <a href="group.html">Group</a> we could also write <code><span class='Value'>i</span><span class='Function'>βŠ‘</span><span class='Value'>z</span></code> ←→ <code><span class='Value'>𝕩</span><span class='Function'>βŠ‘</span><span class='Modifier'>˜</span><span class='Paren'>(</span><span class='Value'>𝕨</span><span class='Function'>∾</span><span class='Composition'>β—‹</span><span class='Paren'>(</span><span class='Function'>↕</span><span class='Composition'>∘</span><span class='Function'>β‰ </span><span class='Paren'>)</span><span class='Function'>β‰’</span><span class='Value'>𝕩</span><span class='Paren'>)</span> <span class='Function'>+</span><span class='Modifier'>´¨</span><span class='Composition'>∘</span><span class='Function'>βŠ”</span> <span class='Value'>i</span></code>.</p>
+<p><code><span class='Value'>𝕩</span></code> is an array. <code><span class='Value'>𝕨</span></code> is a number or numeric list or scalar with <code><span class='Value'>𝕨</span><span class='Function'>≀</span><span class='Modifier2'>β—‹</span><span class='Function'>β‰ β‰’</span><span class='Value'>𝕩</span></code>. The result <code><span class='Value'>z</span></code> has shape <code><span class='Value'>𝕨</span><span class='Function'>∾¬</span><span class='Modifier2'>⟜</span><span class='Value'>𝕨</span><span class='Modifier2'>⌾</span><span class='Paren'>((</span><span class='Function'>β‰ </span><span class='Value'>𝕨</span><span class='Paren'>)</span><span class='Modifier2'>⊸</span><span class='Function'>↑</span><span class='Paren'>)</span><span class='Function'>β‰’</span><span class='Value'>𝕩</span></code>, and element <code><span class='Value'>i</span><span class='Function'>βŠ‘</span><span class='Value'>z</span></code> is <code><span class='Value'>𝕩</span><span class='Function'>βŠ‘</span><span class='Modifier'>˜</span><span class='Paren'>(</span><span class='Function'>β‰ </span><span class='Value'>𝕨</span><span class='Paren'>)(</span><span class='Function'>↑+</span><span class='Modifier2'>⌾</span><span class='Paren'>((</span><span class='Function'>β‰ </span><span class='Value'>𝕨</span><span class='Paren'>)</span><span class='Modifier2'>⊸</span><span class='Function'>↑</span><span class='Paren'>)</span><span class='Function'>↓</span><span class='Paren'>)</span><span class='Value'>i</span></code>.</p>
+<p>Using <a href="group.html">Group</a> we could also write <code><span class='Value'>i</span><span class='Function'>βŠ‘</span><span class='Value'>z</span></code> ←→ <code><span class='Value'>𝕩</span><span class='Function'>βŠ‘</span><span class='Modifier'>˜</span><span class='Paren'>(</span><span class='Value'>𝕨</span><span class='Function'>∾</span><span class='Modifier2'>β—‹</span><span class='Paren'>(</span><span class='Function'>↕</span><span class='Modifier2'>∘</span><span class='Function'>β‰ </span><span class='Paren'>)</span><span class='Function'>β‰’</span><span class='Value'>𝕩</span><span class='Paren'>)</span> <span class='Function'>+</span><span class='Modifier'>´¨</span><span class='Modifier2'>∘</span><span class='Function'>βŠ”</span> <span class='Value'>i</span></code>.</p>
<h2 id="symmetry">Symmetry</h2>
<p>Let's look at an earlier example, along with its transpose.</p>
<pre> <span class='Brace'>{</span><span class='Bracket'>⟨</span><span class='Value'>𝕩</span><span class='Separator'>,</span><span class='Function'>⍉</span><span class='Value'>𝕩</span><span class='Bracket'>⟩</span><span class='Brace'>}</span><span class='Number'>5</span><span class='Function'>↕</span><span class='String'>&quot;abcdefg&quot;</span>
@@ -61,7 +61,7 @@
<span class='Value'>β”˜</span>
</pre>
<p>Although the two arrays have different shapes, they are identical where they overlap.</p>
-<pre> <span class='Function'>≑</span><span class='Composition'>β—‹</span><span class='Paren'>(</span><span class='Number'>3</span><span class='Ligature'>β€Ώ</span><span class='Number'>3</span><span class='Composition'>⊸</span><span class='Function'>↑</span><span class='Paren'>)</span><span class='Composition'>⟜</span><span class='Function'>⍉</span><span class='Number'>5</span><span class='Function'>↕</span><span class='String'>&quot;abcdefg&quot;</span>
+<pre> <span class='Function'>≑</span><span class='Modifier2'>β—‹</span><span class='Paren'>(</span><span class='Number'>3</span><span class='Ligature'>β€Ώ</span><span class='Number'>3</span><span class='Modifier2'>⊸</span><span class='Function'>↑</span><span class='Paren'>)</span><span class='Modifier2'>⟜</span><span class='Function'>⍉</span><span class='Number'>5</span><span class='Function'>↕</span><span class='String'>&quot;abcdefg&quot;</span>
<span class='Number'>1</span>
</pre>
<p>In other words, the i'th element of slice j is the same as the j'th element of slice i: it is the <code><span class='Value'>i</span><span class='Function'>+</span><span class='Value'>j</span></code>'th element of the argument. So transposing still gives a possible result of Windows, but with a different slice length.</p>
@@ -84,7 +84,7 @@
<span class='Value'>[</span> <span class='Number'>3</span> <span class='Number'>2</span> <span class='Number'>1</span> <span class='Number'>1</span> <span class='Value'>]</span>
</pre>
<p>This method extends to any number of initial elements. We can modify the running sum above to keep the length constant by starting with two zeros.</p>
-<pre> <span class='Paren'>((</span><span class='Function'>+</span><span class='Modifier'>Β΄</span><span class='Function'>&lt;</span><span class='Modifier'>˘</span><span class='Paren'>)</span><span class='Function'>≠↕</span><span class='Paren'>(</span><span class='Number'>2</span><span class='Function'>β₯Š</span><span class='Number'>0</span><span class='Paren'>)</span><span class='Composition'>⊸</span><span class='Function'>∾</span><span class='Paren'>)</span> <span class='Bracket'>⟨</span><span class='Number'>2</span><span class='Separator'>,</span><span class='Number'>6</span><span class='Separator'>,</span><span class='Number'>0</span><span class='Separator'>,</span><span class='Number'>1</span><span class='Separator'>,</span><span class='Number'>4</span><span class='Separator'>,</span><span class='Number'>3</span><span class='Bracket'>⟩</span>
+<pre> <span class='Paren'>((</span><span class='Function'>+</span><span class='Modifier'>Β΄</span><span class='Function'>&lt;</span><span class='Modifier'>˘</span><span class='Paren'>)</span><span class='Function'>≠↕</span><span class='Paren'>(</span><span class='Number'>2</span><span class='Function'>β₯Š</span><span class='Number'>0</span><span class='Paren'>)</span><span class='Modifier2'>⊸</span><span class='Function'>∾</span><span class='Paren'>)</span> <span class='Bracket'>⟨</span><span class='Number'>2</span><span class='Separator'>,</span><span class='Number'>6</span><span class='Separator'>,</span><span class='Number'>0</span><span class='Separator'>,</span><span class='Number'>1</span><span class='Separator'>,</span><span class='Number'>4</span><span class='Separator'>,</span><span class='Number'>3</span><span class='Bracket'>⟩</span>
<span class='Value'>[</span> <span class='Number'>2</span> <span class='Number'>8</span> <span class='Number'>8</span> <span class='Number'>7</span> <span class='Number'>5</span> <span class='Number'>8</span> <span class='Value'>]</span>
</pre>