uiua 0.18.1

A stack-based array programming language
Documentation
┌─╴M
  |Foo {Bar Baz}
  |Qux [x y z]
  |Sed {M N}
  |Wir

  Format ← ⍣(
    $"_ and _" °Foo
  | $"⟨_ _ _⟩" °Qux
  | $"_: _" °Sed
  | "Wir!" °Wir
  )
└─╴
⍤⤙≍ "2 and 5" M~Format M~Foo 2 5
⍤⤙≍ "⟨0 4 1⟩" M~Format M~Qux 0 4 1
⍤⤙≍ "Name: Dan" M~Format M~Sed "Name" "Dan"
⍤⤙≍ "Wir!" M~Format M~Wir

~Foo [Bar Baz ← +]
⍤⤙≍ [5 5] Foo 5 2 3

┌─╴Foo
  |Bar {a}
  |Baz {a}
└─╴
⍤⤙≍ 5 Foo~Bar~a Foo~Bar 5

┌─╴Foo
  |Bar
  |Baz {A B}
  |Uiua [C]
└─╴
⍤⤙≍ {"Bar" "Baz" "Uiua"} Foo~Variants

┌─╴S
  ~ {A B C}
  PopA  ← ˜⊙∘⍜A(˜⊙∘⍜⇌°⊂)
  PushB ← ⍜⊙B˜⊂
└─╴
S [1 2 3] [4 5 6] [7 8 9]
S~PopA
S~PushB
⍤⤙≍ S [1 2] [4 5 6 3] [7 8 9]

┌─╴Foo
  |Bar [A]
  |Baz [A]
  |Qux
└─╴
⍤⤙≍ 1 /↥⌕"Non-boxed variant" ⍣Foo~Bar⋅∘ @a
⍤⤙≍ 1 /↥⌕"Non-boxed variant" ⍣Foo~Baz⋅∘ [1 2 3]
⍤⤙≍ [0 5] Foo~Bar 5
⍤⤙≍ [1 5] Foo~Baz 5
⍤⤙≍ 2 Foo~Qux

~Foo [Bar]
⍤⤙≍ ¤[1 2 3] Foo [1 2 3]

~Foo {Bar ← 5}
F! ← ^0 Foo
⍤⤙≍ 5 F!Foo!Bar

~Foo {A B C}
Foo 1 2 3
⍤⤙⊸≍ Foo 3 2 1 ⍜(Foo!⊃A C)˜⊙∘
⍤⤙≍ Foo 4 5 6 °⊸Foo!⊃(C|B|A) 6 5 4

# Unnamed top-level def
~ {Foo Bar}
⍤⤙≍ [3 5] [⊃Foo Bar] New 3 5

# Import followed by def
~ "example" ~ Bar
~Foo {A B C}
⍤⤙≍ {1 2 3} Foo 1 2 3
⍤⤙≍ "bar" Bar

# Chaining
┌─╴M
  ~A {B C}
  ~B {D}
  ~C {E F}
  Ax ← A B 5 C 12 "Hi!"
  ⍤⤙≍ 5 A~B≈D Ax
  ⍤⤙≍ 12 A~C≈E Ax
  ⍤⤙≍ "Hi!" A~C≈F Ax
  ⍤⤙≍ A B 6 C 12 "Hi!" ⍜A~B≈D+₁ Ax
  F! ← A~C≈E A B ^ C⊃+₂×₁₀^
└─╴
⍤⤙≍ 7 M~F!5

┌─╴Enum
  |A
  |B {Test}
└─╴
~Struct {Enum}
Struct Enum~B 4
⍤⤙≍ 4 Struct~Enum≈B~Test

~Foo {A}
┌─╴Bar
  ~ {Foo}
  Func₁ ← Foo~A Foo
  Func₂ ← Foo≈A
└─╴
Bar Foo 5
⍤⤙≍5 Bar~Func₂

# Experimental!

# Field validators
~Foo {Bar: °1type|Baz: ×2 ← +1}
⍤⤙≍ {@a 6} {Foo!⊃Bar Baz} Foo @a 5
⍤⤙≍ Foo @a 9 °⊸Foo~Baz 10 Foo @a 5

~Foo {A: °0type|B: °0type}
⍤⤙≍ [7 42] ⊟ °Foo Foo 7 42
~Foo [A: °0type|B: °0type]
⍤⤙≍ [7 42] ⊟ °Foo Foo 7 42

~A {Field: °[3]△ ← 1_1_1}
⍤⤙≍ 1_1_1 A~Field A

# Data functions
~Foo [X ← 0] ⊟ ⊓X(/+ 1_2_3)
⍤⤙≍ [0 6] Foo
⍤⤙≍ [5 6] Foo!°⊸X 5

~F {A ← 1|B ← 2|C ← 3} ∘
⍤⤙≍ {1 2 3} F
⍤⤙≍ {1 2 5} F!°⊸C 5
⍤⤙≍ {0 2 5} F!(°⊸A 0 °⊸C 5)
⍤⤙≍ {0 2 5} F!(°⊸C 5 °⊸A 0)
⍤⤙≍ {0 9 5} F!(°⊸A 0 °⊸C 5 °⊸B 9)

~F {A ← 0|B ← 0|C ← 0|D ← 0} ∘
⍤⤙≍ {2 3 4 1} F!(°⊸D1⊙(°⊸A|°⊸B|°⊸C)) 2 3 4
⍤⤙≍ {2 3 4 1} F!⊙(°⊸A|°⊸B|°⊸C|°⊸D) 2 3 4 1

~F {A ← +|B C ← 0} ∘
⍤⤙≍ {3 4 0} F 1 2 4
⍤⤙≍ {3 4 5} F!°⊸C 5 1 2 4

~F {A ← 0|B C ← 0} ∘
M! ← F!^
⍤⤙≍ F!°⊸A 2 3 M!°⊸A 2 3

┌─╴Range
  ~ {Min ← 0|Max Inclusive ← 0} ⍜-⇡ ⊃Min(+⊃Max Inclusive)
  ~Incl {Min ← 0} Range!(°⊸Inclusive 1 °⊸Min Min)
  APL ← Range!(°⊸Inclusive1 °⊸Min1)
└─╴

⍤⤙≍ ⇡5 Range 5
⍤⤙≍ ⇡₄9 Range!°⊸Min 4 10
⍤⤙≍ ⇡₁5 Range~APL 5
⍤⤙≍ ⇡6 Range~Incl 5

~Run {A ← 0|B ← 1|C} ≡°□
⍤⤙≍ [0 1 2] Run 2
⍤⤙≍ {2 1 5} °⊸Run~A 2 Run~New 5
⍤⤙≍ [0 8 5] Run!°⊸B8 5
⍤⤙≍ [2 8 5] Run!(°⊸A2 °⊸B8) 5

┌─╴M
  X ← 21 M!()
└─╴