aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FromDyalog.md76
1 files changed, 76 insertions, 0 deletions
diff --git a/FromDyalog.md b/FromDyalog.md
index 5ea3a6c4..3ec2800f 100644
--- a/FromDyalog.md
+++ b/FromDyalog.md
@@ -1,3 +1,7 @@
+A few tables to help users of Dyalog APL (or similar) get started quickly on BQN.
+
+## For reading
+
Here are some closest equivalents in Dyalog APL for the BQN functions that don't use the same glyphs as APL. Correspondence can be approximate, and `⌽` is just used as a decorator to mean "reverse some things".
| BQN | `⋆` | `√` | `∧` | `∨` | `¬` | `≠` | `<` | `>` | `≢` | `⥊` | `∾` | `≍` |
@@ -9,3 +13,75 @@ Here are some closest equivalents in Dyalog APL for the BQN functions that don't
|-------|------|---------|------|-----|-----|-----|-------|------|-----|-----|-----|-----|-----|-----|
| Monad | `,⍀` | `⌽,⌽⍀⌽` | `⍳` | `⍸` | | `⍋` | `⍒` | `⊣⌿` | `⊃` | | `…` | `≠` | | `⌸` |
| Dyad | `↑` | `↓` | `,⌿` | `⌿` | `⊆` | `⍸` | `⌽⍸⌽` | `⌷` | | `⍳` | `…` | `∊` | `⍷` | |
+
+Modifiers and combinators are a little harder. Many have equivalents in some cases, but Dyalog sometimes chooses different functionality based on whether the operand is an array. In BQN an array is always treated as a constant function.
+
+| BQN | `¨` | `⌜` | `´` | `⎉` | `⍟` | `˜` | `∘` | `○` | `⟜` |
+|--------|-----|------|-----|-----|-----|-----|-----|-----|-----|
+| Dyalog | `¨` | `∘.` | `⌿` | `⍤` | `⍣` | `⍨` | `⍤` | `⍥` | `∘` |
+
+In BQN `⎉` is Rank and `∘` is Atop. Dyalog's Atop (`⍤`) and Over (`⍥`) were added in version 18.0.
+
+## For writing
+
+The tables below give approximate implementations of Dyalog primitives for the ones that aren't the same. First- and last-axis pairs are also mostly omitted. BQN just has the first-axis form, and you can get the last-axis form with `⎉1`.
+
+<table>
+<tr><th colspan=3>Functions</th></tr>
+<tr><th> Glyph </th><th> Monadic </th><th> Dyadic </th> </tr>
+<tr><td> <code>*</code> </td><td colspan=2><code>⋆</code></td> </tr>
+<tr><td> <code>⍟</code> </td><td colspan=2><code>⋆⁼</code></td> </tr>
+<tr><td> <code>!</code> </td><td colspan=2>Implement it yourself</td> </tr>
+<tr><td> <code>○</code> </td><td colspan=2>Some complex exponential stuff, maybe</td> </tr>
+<tr><td> <code>~</code> </td><td> <code>¬</code> </td><td> <code>¬∘∊/⊣</code></td> </tr>
+<tr><td> <code>?</code> </td><td colspan=2>Library?</td> </tr>
+<tr><td> <code>⍲</code> </td><td> </td> <td> <code>¬∘∧</code></td> </tr>
+<tr><td> <code>⍱</code> </td><td> </td> <td> <code>¬∘∨</code></td> </tr>
+<tr><td> <code>⍴</code> </td><td> <code>≢</code> </td><td> <code>⥊</code></td> </tr>
+<tr><td> <code>,</code> </td><td> <code>⥊</code> </td><td> <code>∾⎉1</code></td> </tr>
+<tr><td> <code>⍪</code> </td><td> <code>∾˘</code> </td><td> <code>∾</code></td> </tr>
+<tr><td> <code>↑</code> </td><td> <code>></code> </td><td> <code>↑</code></td> </tr>
+<tr><td> <code>↓</code> </td><td> <code><˘<code> </td> <td> <code>↑</code></td> </tr>
+<tr><td> <code>⊂</code> </td><td> <code><<code> </td> <td> <code>\</code></td> </tr>
+<tr><td> <code>⊆</code> </td><td> <code><⍟(0<≡)<code> </td> <td> <code>\</code></td> </tr>
+<tr><td> <code>∊</code> </td><td> <code>{0=≡𝕩:⥊𝕩⋄∾⥊∇¨𝕩}</code> </td><td> <code>∊</code></td> </tr>
+<tr><td> <code>⊃</code> </td><td colspan=2><code>⊑</code></td> </tr>
+<tr><td> <code>⍀</code> </td><td> </td> <td> <code>/⁼</code></td> </tr>
+<tr><td> <code>∩</code> </td><td> </td> <td> <code>∊/⊣</code></td> </tr>
+<tr><td> <code>∪</code> </td><td> <code>∊⊸/</code> </td><td> <code>⊣∾∊˜¬⊸/⊢</code></td> </tr>
+<tr><td> <code>⍳</code> </td><td> <code>↕</code> </td><td> <code>⊐</code></td> </tr>
+<tr><td> <code>⍸</code> </td><td> <code>/</code> </td><td> <code>⍋</code></td> </tr>
+<tr><td> <code>⍋</code> </td><td> <code>⍋</code> </td><td> Give up</td> </tr>
+<tr><td> <code>⍒</code> </td><td> <code>⍒</code> </td><td> Give up</td> </tr>
+<tr><td> <code>≢</code> </td><td> <code>≠</code> </td><td> <code>≢</code></td> </tr>
+<tr><td> <code>⍎</code> </td><td colspan=2 rowspan=2>To be decided</td> </tr>
+<tr><td> <code>⍕</code> </td> </tr>
+<tr><td> <code>⊥</code> </td><td> </td> <td rowspan=2>To be decided</td></tr>
+<tr><td> <code>⊤</code> </td><td> </td> </tr>
+<tr><td> <code>⌹</code> </td><td colspan=2><code>+´∘×⎉1‿∞⁼</code> I guess</td> </tr>
+<tr><td> <code>⌷</code> </td><td> N/A </td> <td> <code>⊏</code></td> </tr>
+</table>
+
+<table>
+<tr><th colspan=3>Operators</th></tr>
+<tr><th> Syntax </th><th> Monadic </th><th> Dyadic </th></tr>
+<tr><td> <code>⌿</code> </td><td> <code>´</code> </td><td> <code>↕</code> </td></tr>
+<tr><td> <code>⍀</code> </td><td colspan=2> <code>↑</code> or <code>`</code> </td></tr>
+<tr><td> <code>¨</code> </td><td colspan=2> <code>¨</code> </td></tr>
+<tr><td> <code>⍨</code> </td><td colspan=2> <code>˜</code> </td></tr>
+<tr><td> <code>⍣</code> </td><td colspan=2> <code>⍟</code> </td></tr>
+<tr><td> <code>f.g</code> </td><td> </td><td> <code>f´∘g⍟1‿∞</code> </td></tr>
+<tr><td> <code>∘.f</code> </td><td> </td><td> <code>f⌜</code> </td></tr>
+<tr><td> <code>A∘g</code> </td><td> <code>A⊸g</code> </td><td> </td></tr>
+<tr><td> <code>f∘B</code> </td><td> <code>f⟜B</code> </td><td> </td></tr>
+<tr><td> <code>f∘g</code> </td><td colspan=2> <code>f⟜g</code> </td></tr>
+<tr><td> <code>f⍤B</code> </td><td colspan=2> <code>f⎉B</code> </td></tr>
+<tr><td> <code>f⍤g</code> </td><td colspan=2> <code>f∘g</code> </td></tr>
+<tr><td> <code>f⍥g</code> </td><td colspan=2> <code>f○g</code> </td></tr>
+<tr><td> <code>f@v</code> </td><td colspan=2> <code>f⌾(v⊸⊏)</code> </td></tr>
+<tr><td> <code>f⍠B</code> </td><td colspan=2> Uh </td></tr>
+<tr><td> <code>f⌸</code> </td><td colspan=2> <code>⊔</code> </td></tr>
+<tr><td> <code>f⌺B</code> </td><td colspan=2> <code>↕</code> </td></tr>
+<tr><td> <code>A⌶</code> </td><td colspan=2> <code>•</code> </td></tr>
+<tr><td> <code>f&</code> </td><td colspan=2> Nothing yet </td></tr>
+</table>