aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/doc/fromJ.html568
-rw-r--r--docs/doc/index.html1
-rw-r--r--docs/index.html2
3 files changed, 570 insertions, 1 deletions
diff --git a/docs/doc/fromJ.html b/docs/doc/fromJ.html
new file mode 100644
index 00000000..72d4f59b
--- /dev/null
+++ b/docs/doc/fromJ.html
@@ -0,0 +1,568 @@
+<head>
+ <link href="../favicon.ico" rel="shortcut icon" type="image/x-icon"/>
+ <link href="../style.css" rel="stylesheet"/>
+ <title>BQN–J dictionary</title>
+</head>
+<div class="nav"><a href="https://github.com/mlochbaum/BQN">BQN</a> / <a href="../index.html">main</a> / <a href="index.html">doc</a></div>
+<h1 id="bqnj-dictionary">BQN–J dictionary</h1>
+<style>.Comment { color: inherit; }</style>
+<p>A guide to help users of J get up to speed with BQN quickly.</p>
+<h2 id="terminology">Terminology</h2>
+<h3 id="array-model">Array model</h3>
+<p>BQN uses the <a href="based.html">based array model</a>, which is fundamentally different from J's flat array model. BQN uses non-array values such as characters and numbers, called &quot;atoms&quot;, while in J every noun is an array. A BQN array can contain any values in any mixture, while a J array must be uniformly numbers, characters, or boxes (BQN doesn't use boxes).</p>
+<p>The J terms &quot;atom&quot; and &quot;element&quot; are used to mean different things by different authors. In BQN, an atom or rank-0 array is called a &quot;unit&quot;, and the values contained in an array—which may or may not be arrays—are called &quot;elements&quot;. Each element is contained in a 0-cell, or rank-0 subarray. BQN uses the term &quot;major cell&quot; for what J calls an &quot;item&quot; of an array: a cell with rank one less than that array. BQN shares the terms &quot;list&quot; and &quot;table&quot; for rank-1 and rank-2 arrays with J.</p>
+<p>BQN uses &quot;<a href="depth.html">depth</a>&quot; rather than &quot;boxing level&quot;. BQN gives atoms depth 0, so that the depth of a BQN array is one higher than the boxing level of the corresponding J array.</p>
+<h3 id="roles">Roles</h3>
+<p>In J, the part of speech is an inherent property of a value, while in BQN it is determined by how the value is used in a particular expression, and can be different from the value's type. See <a href="context.html">context-free grammar</a>.</p>
+<table>
+<thead>
+<tr>
+<th>J part of speech</th>
+<th>BQN role</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Noun</td>
+<td>Subject</td>
+</tr>
+<tr>
+<td>Verb</td>
+<td>Function</td>
+</tr>
+<tr>
+<td>Adverb</td>
+<td>1-modifier</td>
+</tr>
+<tr>
+<td>Conjunction</td>
+<td>2-modifier</td>
+</tr>
+</tbody>
+</table>
+<h2 id="syntax">Syntax</h2>
+<table>
+<thead>
+<tr>
+<th>J</th>
+<th>BQN</th>
+<th>Remarks</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code><span class='Function'>NB.</span></code></td>
+<td><code><span class='Comment'>#</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='String'>'</span></code></td>
+<td><code><span class='String'>&quot;</span></code></td>
+<td><code><span class='String'>'</span></code> creates characters</td>
+</tr>
+<tr>
+<td><code><span class='Function'>=</span><span class='Number'>.</span></code> and <code><span class='Function'>=</span><span class='Value'>:</span></code></td>
+<td><code><span class='Gets'>←</span></code> and <code><span class='Gets'>↩</span></code></td>
+<td><code><span class='Gets'>←</span></code> to define; <code><span class='Gets'>↩</span></code> to modify</td>
+</tr>
+<tr>
+<td><code><span class='Number'>3</span> <span class='Value'>:…</span></code> or <code><span class='Brace'>{{</span><span class='Value'>…</span><span class='Brace'>}}</span></code></td>
+<td><code><span class='Value'>;</span></code></td>
+<td>To separate function cases</td>
+</tr>
+<tr>
+<td><code><span class='Value'>:</span></code></td>
+<td><code><span class='Brace'>{</span><span class='Value'>…</span><span class='Brace'>}</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Value'>x</span></code> <code><span class='Value'>y</span></code></td>
+<td><code><span class='Value'>𝕨</span></code> <code><span class='Value'>𝕩</span></code></td>
+<td><code><span class='Function'>𝕊</span></code> for block function self-reference</td>
+</tr>
+<tr>
+<td><code><span class='Value'>u</span></code> <code><span class='Value'>v</span></code></td>
+<td><code><span class='Function'>𝔽</span></code> <code><span class='Function'>𝔾</span></code></td>
+<td><code><span class='Value'>𝕣</span></code> for block modifier self-reference</td>
+</tr>
+<tr>
+<td><code><span class='Modifier2'>_</span></code></td>
+<td><code><span class='Number'>¯</span></code> or <code><span class='Number'>∞</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Number'>2</span> <span class='Number'>3</span> <span class='Number'>4</span></code></td>
+<td><code><span class='Number'>2</span><span class='Ligature'>‿</span><span class='Number'>3</span><span class='Ligature'>‿</span><span class='Number'>4</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Value'>[:</span></code></td>
+<td><code><span class='Nothing'>·</span></code></td>
+<td>Cap</td>
+</tr>
+<tr>
+<td><code><span class='Value'>assert.</span></code></td>
+<td><code><span class='Function'>!</span></code></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+<p>BQN's explicit functions and modifiers are called &quot;blocks&quot;, and have a more sophisticated syntax than J; see <a href="block.html">the documentation</a>. BQN uses lexical scope, and has no global variables. BQN also has a <a href="syntax.html#list-notation">list notation</a> using <code><span class='Bracket'>⟨⟩</span></code>.</p>
+<h2 id="for-reading">For reading</h2>
+<p>J analogues of BQN primitive functions are given below. They are not always the same; usually this is because BQN has extra functionality relative to J, although in some cases it has less or different functionality.</p>
+<p>Functions <code><span class='Function'>+</span></code> <code><span class='Function'>-</span></code> <code><span class='Function'>|</span></code> <code><span class='Function'>&lt;</span></code> <code><span class='Function'>&gt;</span></code> are the same in both languages.</p>
+<table>
+<thead>
+<tr>
+<th align="center">BQN</th>
+<th align="center"><code><span class='Function'>×</span></code></th>
+<th align="center"><code><span class='Function'>÷</span></code></th>
+<th align="center"><code><span class='Function'>⋆</span></code></th>
+<th align="center"><code><span class='Function'>√</span></code></th>
+<th align="center"><code><span class='Function'>⌊</span></code></th>
+<th align="center"><code><span class='Function'>⌈</span></code></th>
+<th align="center"><code><span class='Function'>≤</span></code></th>
+<th align="center"><code><span class='Function'>≥</span></code></th>
+<th align="center"><code><span class='Function'>⊣</span></code></th>
+<th align="center"><code><span class='Function'>⊢</span></code></th>
+<th align="center"><code><span class='Function'>⌽</span></code></th>
+<th align="center"><code><span class='Function'>⍉</span></code></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">J</td>
+<td align="center"><code><span class='Value'>*</span></code></td>
+<td align="center"><code><span class='Value'>%</span></code></td>
+<td align="center"><code><span class='Value'>^</span></code></td>
+<td align="center"><code><span class='Value'>%:</span></code></td>
+<td align="center"><code><span class='Function'>&lt;</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>&gt;</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>&lt;</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Function'>&gt;</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Value'>[</span></code></td>
+<td align="center"><code><span class='Value'>]</span></code></td>
+<td align="center"><code><span class='Function'>|</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>|</span><span class='Value'>:</span></code></td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th align="center">BQN</th>
+<th align="center"><code><span class='Function'>∧</span></code></th>
+<th align="center"><code><span class='Function'>∨</span></code></th>
+<th align="center"><code><span class='Function'>¬</span></code></th>
+<th align="center"><code><span class='Function'>=</span></code></th>
+<th align="center"><code><span class='Function'>≠</span></code></th>
+<th align="center"><code><span class='Function'>≡</span></code></th>
+<th align="center"><code><span class='Function'>≢</span></code></th>
+<th align="center"><code><span class='Function'>⥊</span></code></th>
+<th align="center"><code><span class='Function'>∾</span></code></th>
+<th align="center"><code><span class='Function'>≍</span></code></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">Monad</td>
+<td align="center"><code><span class='Function'>/</span><span class='Value'>:~</span></code></td>
+<td align="center"><code><span class='Value'>\:~</span></code></td>
+<td align="center"><code><span class='Function'>-</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Comment'>#@$</span></code></td>
+<td align="center"><code><span class='Comment'>#</span></code></td>
+<td align="center"><code><span class='Function'>L.</span></code></td>
+<td align="center"><code><span class='Value'>$</span></code></td>
+<td align="center"><code><span class='Separator'>,</span></code></td>
+<td align="center"><code><span class='Value'>;</span></code></td>
+<td align="center"><code><span class='Separator'>,</span><span class='Value'>:</span></code></td>
+</tr>
+<tr>
+<td align="center">Dyad</td>
+<td align="center"><code><span class='Value'>*</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>+</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>+-</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>=</span></code></td>
+<td align="center"><code><span class='Value'>~:</span></code></td>
+<td align="center"><code><span class='Function'>-</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Function'>-</span><span class='Number'>.</span><span class='String'>@</span><span class='Function'>-</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Value'>$</span></code></td>
+<td align="center"><code><span class='Separator'>,</span></code></td>
+<td align="center"><code><span class='Separator'>,</span><span class='Value'>:</span></code></td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th align="center">BQN</th>
+<th align="center"><code><span class='Function'>↑</span></code></th>
+<th align="center"><code><span class='Function'>↓</span></code></th>
+<th align="center"><code><span class='Function'>↕</span></code></th>
+<th align="center"><code><span class='Function'>»</span></code></th>
+<th align="center"><code><span class='Function'>«</span></code></th>
+<th align="center"><code><span class='Function'>/</span></code></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">Monad</td>
+<td align="center"><code><span class='Function'>&lt;</span><span class='Value'>\</span></code></td>
+<td align="center"><code><span class='Function'>&lt;</span><span class='Value'>\</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Value'>i.</span></code></td>
+<td align="center"><code><span class='Comment'>#{.(_1-#){.]</span></code></td>
+<td align="center"><code><span class='Function'>-</span><span class='String'>@</span><span class='Comment'>#{.(1+#){.]</span></code></td>
+<td align="center"><code><span class='Function'>I.</span></code></td>
+</tr>
+<tr>
+<td align="center">Dyad</td>
+<td align="center"><code><span class='Brace'>{</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Brace'>}</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>&lt;</span><span class='Value'>\</span></code></td>
+<td align="center"><code><span class='Comment'>#@]{.,</span></code></td>
+<td align="center"><code><span class='Function'>-</span><span class='String'>@</span><span class='Comment'>#@]{.,~</span></code></td>
+<td align="center"><code><span class='Comment'>#</span></code></td>
+</tr>
+</tbody>
+</table>
+<table>
+<thead>
+<tr>
+<th align="center">BQN</th>
+<th align="center"><code><span class='Function'>⍋</span></code></th>
+<th align="center"><code><span class='Function'>⍒</span></code></th>
+<th align="center"><code><span class='Function'>⊏</span></code></th>
+<th align="center"><code><span class='Function'>⊑</span></code></th>
+<th align="center"><code><span class='Function'>⊐</span></code></th>
+<th align="center"><code><span class='Function'>⊒</span></code></th>
+<th align="center"><code><span class='Function'>∊</span></code></th>
+<th align="center"><code><span class='Function'>⍷</span></code></th>
+<th align="center"><code><span class='Function'>⊔</span></code></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">Monad</td>
+<td align="center"><code><span class='Function'>/</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Function'>/</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Brace'>{</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Number'>0</span><span class='Brace'>{</span><span class='Value'>::</span><span class='Separator'>,</span></code></td>
+<td align="center"><code><span class='Value'>i.~~</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Value'>…</span></code></td>
+<td align="center"><code><span class='Value'>~:</span></code></td>
+<td align="center"><code><span class='Value'>~</span><span class='Number'>.</span></code></td>
+<td align="center"><code><span class='Function'>&lt;/</span><span class='Number'>.i.</span><span class='String'>@</span><span class='Comment'>#</span></code></td>
+</tr>
+<tr>
+<td align="center">Dyad</td>
+<td align="center"><code><span class='Function'>I.</span></code></td>
+<td align="center"><code><span class='Function'>I.</span><span class='Value'>&amp;:</span><span class='Function'>-</span></code></td>
+<td align="center"><code><span class='Brace'>{</span></code></td>
+<td align="center"><code><span class='Brace'>{</span><span class='Value'>::</span></code></td>
+<td align="center"><code><span class='Value'>i.</span></code></td>
+<td align="center"><code><span class='Value'>…</span></code></td>
+<td align="center"><code><span class='Value'>e.</span></code></td>
+<td align="center"><code><span class='Function'>E.</span></code></td>
+<td align="center"><code><span class='Function'>&lt;/</span><span class='Number'>.</span></code></td>
+</tr>
+</tbody>
+</table>
+<p>Most of BQN's combinators have J equivalents. The J equivalent <code><span class='String'>&quot;</span><span class='Modifier2'>_</span></code> for <code><span class='Modifier'>˙</span></code> assumes a noun operand, but <code><span class='Modifier'>˙</span></code> makes a constant function for any operand. <code><span class='Modifier2'>◶</span></code> has arguments reversed relative to <code><span class='String'>@</span><span class='Number'>.</span></code>, and uses an actual array of functions rather than gerunds. Besides these, BQN's <code><span class='Modifier2'>⟜</span></code> is like a J hook, that is, <code><span class='Function'>F</span><span class='Modifier2'>⟜</span><span class='Function'>G</span></code> is <code><span class='Paren'>(</span><span class='Function'>F</span> <span class='Function'>G</span><span class='Paren'>)</span></code>, and <code><span class='Modifier2'>⊸</span></code> applies in the opposite direction.</p>
+<table>
+<thead>
+<tr>
+<th align="center">BQN</th>
+<th align="center"><code><span class='Modifier'>˙</span></code></th>
+<th align="center"><code><span class='Modifier'>˜</span></code></th>
+<th align="center"><code><span class='Modifier2'>∘</span></code></th>
+<th align="center"><code><span class='Modifier2'>○</span></code></th>
+<th align="center"><code><span class='Modifier2'>⌾</span></code></th>
+<th align="center"><code><span class='Modifier2'>⊘</span></code></th>
+<th align="center"><code><span class='Modifier2'>◶</span></code></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">J</td>
+<td align="center"><code><span class='String'>&quot;</span><span class='Modifier2'>_</span></code></td>
+<td align="center"><code><span class='Value'>~</span></code></td>
+<td align="center"><code><span class='String'>@</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Value'>&amp;:</span></code></td>
+<td align="center"><code><span class='Value'>&amp;</span><span class='Number'>.</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='String'>@</span><span class='Number'>.</span></code></td>
+</tr>
+</tbody>
+</table>
+<p>For other modifiers the correspondence is looser. Here <code><span class='Modifier'>⌜</span></code> shows the dyadic case and <code><span class='Modifier'>´</span></code> the monadic case only.</p>
+<table>
+<thead>
+<tr>
+<th align="center">BQN</th>
+<th align="center"><code><span class='Modifier'>¨</span></code></th>
+<th align="center"><code><span class='Modifier'>⌜</span></code></th>
+<th align="center"><code><span class='Modifier'>´</span></code></th>
+<th align="center"><code><span class='Modifier'>˝</span></code></th>
+<th align="center"><code><span class='Modifier'>`</span></code></th>
+<th align="center"><code><span class='Modifier'>˘</span></code></th>
+<th align="center"><code><span class='Modifier2'>⎉</span></code></th>
+<th align="center"><code><span class='Modifier2'>⚇</span></code></th>
+<th align="center"><code><span class='Modifier2'>⍟</span></code></th>
+<th align="center"><code><span class='Modifier'>⁼</span></code></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">J</td>
+<td align="center"><code><span class='Value'>&amp;</span><span class='Number'>.</span><span class='Function'>&gt;</span></code></td>
+<td align="center"><code><span class='Value'>&amp;</span><span class='Number'>.</span><span class='Function'>&gt;/</span></code></td>
+<td align="center"><code><span class='Value'>&amp;</span><span class='Number'>.</span><span class='Function'>&gt;/</span></code></td>
+<td align="center"><code><span class='Function'>/</span></code></td>
+<td align="center"><code><span class='Function'>/</span><span class='Value'>\</span></code></td>
+<td align="center"><code><span class='String'>&quot;</span><span class='Modifier'>_1</span></code></td>
+<td align="center"><code><span class='String'>&quot;</span></code></td>
+<td align="center"><code><span class='Function'>L</span><span class='Value'>:</span></code></td>
+<td align="center"><code><span class='Value'>^:</span></code></td>
+<td align="center"><code><span class='Value'>^:</span><span class='Modifier'>_1</span></code></td>
+</tr>
+</tbody>
+</table>
+<h2 id="for-writing">For writing</h2>
+<p>J's primitive nouns are easily defined in BQN.</p>
+<table>
+<thead>
+<tr>
+<th>J</th>
+<th>BQN</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code><span class='Value'>a.</span></code></td>
+<td><code><span class='String'>@</span><span class='Function'>+↕</span><span class='Number'>256</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>a:</span></code></td>
+<td><code><span class='Function'>&lt;↕</span><span class='Number'>0</span></code></td>
+</tr>
+</tbody>
+</table>
+<p>Functions <code><span class='Function'>+</span></code> <code><span class='Function'>-</span></code> <code><span class='Function'>|</span></code> <code><span class='Function'>&lt;</span></code> <code><span class='Function'>&gt;</span></code> are the same in both languages.</p>
+<p>Some other primitives are essentially the same in J and BQN, but with different spellings (but <a href="transpose.html">transpose</a> behaves differently; J's dyadic <code><span class='Function'>|</span><span class='Value'>:</span></code> is more like <code><span class='Function'>⍉</span><span class='Modifier'>⁼</span></code>):</p>
+<table>
+<thead>
+<tr>
+<th align="center">J</th>
+<th align="center"><code><span class='Value'>*</span></code></th>
+<th align="center"><code><span class='Value'>%</span></code></th>
+<th align="center"><code><span class='Value'>^</span></code></th>
+<th align="center"><code><span class='Value'>^</span><span class='Number'>.</span></code></th>
+<th align="center"><code><span class='Value'>%:</span></code></th>
+<th align="center"><code><span class='Function'>&lt;</span><span class='Number'>.</span></code></th>
+<th align="center"><code><span class='Function'>&gt;</span><span class='Number'>.</span></code></th>
+<th align="center"><code><span class='Value'>[</span></code></th>
+<th align="center"><code><span class='Value'>]</span></code></th>
+<th align="center"><code><span class='Function'>|</span><span class='Number'>.</span></code></th>
+<th align="center"><code><span class='Function'>|</span><span class='Value'>:</span></code></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="center">BQN</td>
+<td align="center"><code><span class='Function'>×</span></code></td>
+<td align="center"><code><span class='Function'>÷</span></code></td>
+<td align="center"><code><span class='Function'>⋆</span></code></td>
+<td align="center"><code><span class='Function'>⋆</span><span class='Modifier'>⁼</span></code></td>
+<td align="center"><code><span class='Function'>√</span></code></td>
+<td align="center"><code><span class='Function'>⌊</span></code></td>
+<td align="center"><code><span class='Function'>⌈</span></code></td>
+<td align="center"><code><span class='Function'>⊣</span></code></td>
+<td align="center"><code><span class='Function'>⊢</span></code></td>
+<td align="center"><code><span class='Function'>⌽</span></code></td>
+<td align="center"><code><span class='Function'>⍉</span></code></td>
+</tr>
+</tbody>
+</table>
+<p>Additionally, <code><span class='Function'>|</span><span class='Number'>.</span><span class='Function'>!</span><span class='Number'>.f</span></code> is <code><span class='Function'>⥊</span><span class='Modifier2'>⟜</span><span class='Value'>f</span><span class='Modifier2'>⊸</span><span class='Function'>«</span></code> with a natural number left argument. Change <code><span class='Function'>«</span></code> to <code><span class='Function'>»</span></code> to rotate right instead of left.</p>
+<p>The tables below give approximate implementations of J primitives. J has a whole lot of complicated primitives that no one uses (some of which are officially deprecated), so not everything is translated here.</p>
+<table>
+<thead>
+<tr>
+<th>J</th>
+<th>Monad</th>
+<th>Dyad</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><code><span class='Function'>=</span></code></td>
+<td><code><span class='Function'>⍷</span><span class='Modifier2'>⊸</span><span class='Paren'>(</span><span class='Function'>≡</span><span class='Modifier'>⌜</span><span class='Paren'>)</span></code></td>
+<td><code><span class='Function'>=</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>&lt;</span><span class='Value'>:</span></code></td>
+<td><code><span class='Function'>-</span><span class='Modifier2'>⟜</span><span class='Number'>1</span></code></td>
+<td><code><span class='Function'>≤</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>&gt;</span><span class='Value'>:</span></code></td>
+<td><code><span class='Number'>1</span><span class='Modifier2'>⊸</span><span class='Function'>+</span></code></td>
+<td><code><span class='Function'>≥</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>+</span><span class='Number'>.</span></code></td>
+<td></td>
+<td><code><span class='Function'>∨</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>+</span><span class='Value'>:</span></code></td>
+<td><code><span class='Number'>2</span><span class='Modifier2'>⊸</span><span class='Function'>×</span></code></td>
+<td><code><span class='Function'>¬∨</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>*:</span></code></td>
+<td><code><span class='Function'>×</span><span class='Modifier'>˜</span></code></td>
+<td><code><span class='Function'>¬∧</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>-</span><span class='Number'>.</span></code></td>
+<td><code><span class='Function'>¬</span></code></td>
+<td><code><span class='Function'>¬</span><span class='Modifier2'>∘</span><span class='Function'>∊/⊣</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>-</span><span class='Value'>:</span></code></td>
+<td><code><span class='Function'>÷</span><span class='Modifier2'>⟜</span><span class='Number'>2</span></code></td>
+<td><code><span class='Function'>≡</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>%</span><span class='Number'>.</span></code></td>
+<td></td>
+<td><code><span class='Function'>+</span><span class='Modifier'>˝</span><span class='Modifier2'>∘</span><span class='Function'>×</span><span class='Modifier2'>⎉</span><span class='Number'>1</span><span class='Ligature'>‿</span><span class='Number'>∞</span><span class='Modifier'>⁼</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>$</span></code></td>
+<td><code><span class='Function'>≢</span></code></td>
+<td><code><span class='Function'>⥊</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>~</span><span class='Number'>.</span></code></td>
+<td><code><span class='Function'>⍷</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Value'>~:</span></code></td>
+<td><code><span class='Function'>∊</span></code></td>
+<td><code><span class='Function'>≠</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Separator'>,</span></code></td>
+<td><code><span class='Function'>⥊</span></code></td>
+<td><code><span class='Function'>∾</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Separator'>,</span><span class='Number'>.</span></code></td>
+<td><code><span class='Function'>⥊</span><span class='Modifier'>˘</span></code></td>
+<td><code><span class='Function'>∾</span><span class='Modifier'>˘</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Separator'>,</span><span class='Value'>:</span></code></td>
+<td><code><span class='Function'>≍</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Value'>;</span></code></td>
+<td><code><span class='Function'>∾</span></code></td>
+<td><code><span class='Function'>∾</span><span class='Modifier2'>⟜</span><span class='Paren'>(</span><span class='Function'>&lt;</span><span class='Modifier2'>⍟</span><span class='Paren'>(</span><span class='Number'>1</span><span class='Function'>≥≡</span><span class='Paren'>))</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Comment'>#</span></code></td>
+<td><code><span class='Function'>≠</span></code></td>
+<td><code><span class='Function'>/</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Comment'>#.</span></code></td>
+<td><code><span class='Function'>+</span><span class='Modifier'>˜</span><span class='Modifier2'>⊸</span><span class='Function'>+</span><span class='Modifier'>˜´</span><span class='Modifier2'>∘</span><span class='Function'>⌽</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Comment'>#:</span></code></td>
+<td><code><span class='Function'>⌽</span><span class='Number'>2</span><span class='Function'>|⌊</span><span class='Modifier2'>∘</span><span class='Function'>÷</span><span class='Modifier2'>⟜</span><span class='Number'>2</span><span class='Modifier2'>⍟</span><span class='Paren'>(</span><span class='Function'>↕</span><span class='Number'>1</span><span class='Function'>+</span><span class='Nothing'>·</span><span class='Function'>⌊</span><span class='Number'>2</span><span class='Function'>⋆</span><span class='Modifier'>⁼</span><span class='Function'>⊢</span><span class='Paren'>)</span></code></td>
+<td><code><span class='Brace'>{</span><span class='Value'>𝕨</span><span class='Function'>|</span><span class='Number'>1</span><span class='Function'>↓⌊</span><span class='Modifier2'>∘</span><span class='Function'>÷</span><span class='Modifier'>`</span><span class='Modifier2'>⌾</span><span class='Function'>⌽</span><span class='Value'>𝕨</span><span class='Function'>∾&lt;</span><span class='Value'>𝕩</span><span class='Brace'>}</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>!</span></code></td>
+<td><code><span class='Function'>×</span><span class='Modifier'>´</span><span class='Number'>1</span><span class='Function'>+↕</span></code></td>
+<td><code><span class='Function'>-</span><span class='Modifier'>˜</span><span class='Paren'>(</span><span class='Function'>+÷</span><span class='Modifier2'>○</span><span class='Paren'>(</span><span class='Function'>×</span><span class='Modifier'>´</span><span class='Paren'>)</span><span class='Function'>⊢</span><span class='Paren'>)</span><span class='Number'>1</span><span class='Function'>+↕</span><span class='Modifier2'>∘</span><span class='Function'>⊣</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>/</span><span class='Value'>:</span></code></td>
+<td><code><span class='Function'>⍋</span></code></td>
+<td><code><span class='Function'>⍋</span><span class='Modifier2'>⊸</span><span class='Function'>⊏</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>\:</span></code></td>
+<td><code><span class='Function'>⍒</span></code></td>
+<td><code><span class='Function'>⍒</span><span class='Modifier2'>⊸</span><span class='Function'>⊏</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Brace'>{</span></code></td>
+<td><code><span class='Paren'>(</span><span class='Function'>&lt;</span><span class='Bracket'>⟨⟩</span><span class='Paren'>)</span><span class='Function'>&lt;</span><span class='Modifier2'>⊸</span><span class='Function'>∾</span><span class='Modifier'>⌜´</span><span class='Function'>⊢</span></code></td>
+<td><code><span class='Function'>⊏</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Brace'>{</span><span class='Number'>.</span></code></td>
+<td><code><span class='Function'>⊏</span></code></td>
+<td><code><span class='Function'>↑</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Brace'>{</span><span class='Value'>:</span></code></td>
+<td><code><span class='Function'>⊢</span><span class='Modifier'>˝</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Brace'>{</span><span class='Value'>::</span></code></td>
+<td></td>
+<td><code><span class='Function'>⊑</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Brace'>}</span><span class='Number'>.</span></code></td>
+<td><code><span class='Number'>1</span><span class='Modifier2'>⊸</span><span class='Function'>↓</span></code></td>
+<td><code><span class='Function'>↓</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Brace'>}</span><span class='Value'>:</span></code></td>
+<td><code><span class='Number'>¯1</span><span class='Modifier2'>⊸</span><span class='Function'>↓</span></code></td>
+<td></td>
+</tr>
+<tr>
+<td><code><span class='Value'>e.</span></code></td>
+<td><code><span class='Function'>&gt;&lt;</span><span class='Modifier2'>∘</span><span class='Function'>∾∊</span><span class='Modifier'>¨</span><span class='Function'>⊢</span></code></td>
+<td><code><span class='Function'>∊</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>E.</span></code></td>
+<td></td>
+<td><code><span class='Function'>⍷</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>i.</span></code></td>
+<td><code><span class='Function'>↕</span></code></td>
+<td><code><span class='Function'>⊐</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Value'>i:</span></code></td>
+<td><code><span class='Brace'>{</span><span class='Value'>𝕩</span><span class='Function'>-</span><span class='Modifier'>˜</span><span class='Function'>↕</span><span class='Number'>1</span><span class='Function'>+</span><span class='Number'>2</span><span class='Function'>×</span><span class='Value'>𝕩</span><span class='Brace'>}</span></code></td>
+<td><code><span class='Function'>≠</span><span class='Modifier2'>∘</span><span class='Function'>⊣-</span><span class='Number'>1</span><span class='Function'>+⌽</span><span class='Modifier2'>⊸</span><span class='Function'>⊐</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>I.</span></code></td>
+<td><code><span class='Function'>/</span></code></td>
+<td><code><span class='Function'>⍋</span></code></td>
+</tr>
+<tr>
+<td><code><span class='Function'>L.</span></code></td>
+<td><code><span class='Function'>≡</span></code></td>
+<td></td>
+</tr>
+</tbody>
+</table>
diff --git a/docs/doc/index.html b/docs/doc/index.html
index 72e9568a..898d2793 100644
--- a/docs/doc/index.html
+++ b/docs/doc/index.html
@@ -40,6 +40,7 @@
<ul>
<li><a href="glossary.html">Glossary</a></li>
<li><a href="fromDyalog.html">BQN-Dyalog dictionary</a></li>
+<li><a href="fromJ.html">BQN-J dictionary</a></li>
</ul>
<p>Speculation:</p>
<ul>
diff --git a/docs/index.html b/docs/index.html
index c9ca4633..f324cd68 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -55,7 +55,7 @@
<h2 id="how-do-i-get-started">How do I get started?</h2>
<p><em>Writing good learning material for a programming language is a pretty huge task, so neither the tutorials nor the documentation are complete. With some willingness to experiment and possibly outside knowledge of array programming, it's enough to get by, just not smooth sailing.</em></p>
<p>BQN's <a href="tutorial/index.html"><strong>tutorials</strong></a> are intended as an introduction to array programming with BQN. They assume only knowledge of elementary mathematics, but will probably be hard to follow if you have <em>no</em> programming experience. BQN has a lot in common with dynamically-typed functional languages like Lisp, Julia, or Javascript, so knowledge of these languages will be particularly helpful. However, there's a significant (but shrinking) gap between the last tutorial and existing documentation. If you're motivated, you may be able to get across by reading material on other array languages like APL, J, NumPy, or Julia.</p>
-<p>If you're already an array programmer, then you're in better shape: the current <a href="doc/index.html"><strong>documentation</strong></a> covers nearly all differences from APL, and the BQN-Dyalog APL <a href="doc/fromDyalog.html">dictionary</a> might also be a useful resource. However, you should be aware of two key differences between BQN and existing array languages beyond just the changes of <a href="doc/primitive.html">primitives</a>—if these differences don't seem important to you then you don't understand them! BQN's <a href="doc/based.html">based array model</a> is different from both a flat array model like J and a nested one like APL2, Dyalog, or GNU APL in that it has true non-array values (plain numbers and characters) that are different from depth-0 scalars. BQN also uses <a href="doc/context.html">syntactic roles</a> rather than dynamic type to determine how values interact, that is, what's an argument or operand and so on. This system, along with lexical closures, means BQN fully supports Lisp-style <a href="doc/functional.html">functional programming</a>.</p>
+<p>If you're already an array programmer, then you're in better shape: the current <a href="doc/index.html"><strong>documentation</strong></a> covers nearly all differences from APL, and the <a href="doc/fromDyalog.html">BQN-Dyalog APL</a> or <a href="doc/fromJ.html">BQN-J</a> dictionary might also be a useful resource. However, you should be aware of two key differences between BQN and existing array languages beyond just the changes of <a href="doc/primitive.html">primitives</a>—if these differences don't seem important to you then you don't understand them! BQN's <a href="doc/based.html">based array model</a> is different from both a flat array model like J and a nested one like APL2, Dyalog, or GNU APL in that it has true non-array values (plain numbers and characters) that are different from depth-0 scalars. BQN also uses <a href="doc/context.html">syntactic roles</a> rather than dynamic type to determine how values interact, that is, what's an argument or operand and so on. This system, along with lexical closures, means BQN fully supports Lisp-style <a href="doc/functional.html">functional programming</a>.</p>
<p>A useful tool for both beginners and experienced users is <a href="https://mlochbaum.github.io/bqncrate/"><strong>BQNcrate</strong></a>, a searchable collection of BQN snippets to solve particular tasks. If you have a question about how you might approach a problem, give it a try by typing in a relevant keyword or two.</p>
<h2 id="where-can-i-find-bqn-users">Where can I find BQN users?</h2>
<p>Most BQN users are active on the <a href="https://chat.stackexchange.com/rooms/52405/the-apl-orchard">APL Orchard</a> forum. If you (like me) don't have a Stack Overflow or Stack Exchange account with a few points you'll have to send an email to get forum access; see the instructions in the room description. You can also chat there by IRC: a bot mirrors messages back and forth to the #apl freenode channel. The <a href="https://matrix.org/">Matrix</a> channel #apl:matrix.org is similarly linked.</p>