aboutsummaryrefslogtreecommitdiff
path: root/FromDyalog.md
blob: 3ec2800f13753778a3fa6859c0a25835931f177e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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   | `⋆` | `√`    | `∧`   | `∨`   | `¬`   | `≠` | `<` | `>` | `≢` | `⥊` | `∾`   | `≍`    |
|-------|-----|--------|-------|-------|-------|-----|-----|-----|-----|-----|-------|--------|
| Monad | `*` | `*∘÷⍨` | `[⍋]` | `[⍒]` | `~`   | `≢` | `⊂` | `↑` | `⍴` | `,` | `⊃,⌿` | `↑,⍥⊂` |
| Dyad  |     |        | `∧`   | `∨`   | `1+-` | `≠` | `<` | `>` | `≢` | `⍴` | `⍪`   |        |

| BQN   | `↑`  | `↓`     | `↕`  | `/` | `\` | `⍋` | `⍒`   | `⊏`  | `⊑` | `⊐` | `⊒` | `∊` | `⍷` | `⊔` |
|-------|------|---------|------|-----|-----|-----|-------|------|-----|-----|-----|-----|-----|-----|
| 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>