diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-07-17 17:26:14 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2020-07-17 17:26:14 -0400 |
| commit | d2a41c0da6b568d203563d278a61f9e85ef1a8b8 (patch) | |
| tree | c4a976d5082ef0243b0e09c0a40f517cd4ce0502 /doc | |
| parent | eada33d25b959649e632f4a25635505adcbe222e (diff) | |
Process/highlight fromDyalog.md
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/fromDyalog.md | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/doc/fromDyalog.md b/doc/fromDyalog.md new file mode 100644 index 00000000..bbb99376 --- /dev/null +++ b/doc/fromDyalog.md @@ -0,0 +1,89 @@ +# BQN–Dyalog APL dictionary + +A few tables to help users of Dyalog APL (or similar) get started quickly on BQN. Here we assume `⎕ML` is 1 for Dyalog. + +## 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 | `⋆` | `√` | `∧` | `∨` | `¬` | `≠` | `<` | `>` | `≢` | `⥊` | `∾` | `≍` | +|-------|-----|----------|-------|-------|-------|-----|-----|-----|-----|-----|-------|--------| +| Monad | `*` | `*∘(÷2)` | `[⍋]` | `[⍒]` | `~` | `≢` | `⊂` | `↑` | `⍴` | `,` | `⊃,⌿` | `↑,⍥⊂` | +| Dyad | `*` | `*∘÷⍨` | `∧` | `∨` | `1+-` | `≠` | `<` | `>` | `≢` | `⍴` | `⍪` | `↑,⍥⊂` | + +| BQN | `↑` | `↓` | `↕` | `/` | `⍋` | `⍒` | `⊏` | `⊑` | `⊐` | `⊒` | `∊` | `⍷` | `⊔` | +|-------|------|---------|------|-----|-----|-------|------|-----|-----|-----|-----|-----|------------| +| Monad | `,⍀` | `⌽,⌽⍀⌽` | `⍳` | `⍸` | `⍋` | `⍒` | `⊣⌿` | `⊃` | | `…` | `≠` | `∪` | `⌸` | +| Dyad | `↑` | `↓` | `,⌿` | `⌿` | `⍸` | `⌽⍸⌽` | `⌷` | `⊃` | `⍳` | `…` | `∊` | `⍷` | `⌸` or `⊆` | + +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> <code>{+⟜(𝕨⊸×)´⌽𝕩}</code> </td> </tr> +<tr><td> <code>⊤</code> </td><td> </td><td> <code>{𝕨|1↓⌊∘÷`⌾⌽𝕨∾<𝕩}</code></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><code>⍷⊸⊐⊔↕∘≠</code></td><td><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> |
