◶ ← {𝕨((𝕨𝔽𝕩)⊑𝕘){𝔽}𝕩} # LIMITED to number left operand result ⊘ ← {𝕨((1{𝔽}𝕨)-0)◶𝔽‿𝔾 𝕩} ⊢ ← {𝕩} ⊣ ← {𝕩}⊘{𝕨} ˜ ← {𝕩𝔽𝕨⊣𝕩} ∘ ← {𝔽𝕨𝔾𝕩} ○ ← {(𝔾𝕨)𝔽𝔾𝕩} ⊸ ← {(𝔽𝕨⊣𝕩)𝔾𝕩} ⟜ ← {(𝕨⊣𝕩)𝔽𝔾𝕩} ⍟ ← {𝕨((𝕨𝔾𝕩)⊑⊢‿𝕗){𝔽}𝕩} # LIMITED to boolean right operand result # LIMITED to numeric arguments for scalar cases < ← {⟨⟩⥊⟨𝕩⟩} ⊘ (1-≤˜) > ← (1-≤) ≢ ↩ IsArray◶⟨⟩‿≢ # LIMITED to monadic case ≠ ← (0<=)◶⟨1⋄0⊑≢⟩ _fold←{ ! 1==𝕩 l←≠v←𝕩 ⋄ F←𝔽 r←𝕨 (0○=◶⟨𝔽_e⋄𝔽˜_e˜⟩⋄𝔽_d⟩ } _perv←{ # Pervasion R←𝔽{𝕨𝔽_perv𝕩} +○IsArray◶⟨𝔽⋄R⌜⊘(>○IsArray◶{𝕨{𝕗R𝕩}⌜𝕩}‿{𝕩{𝕩R𝕗}⌜𝕨})⋄R _eachd⟩ } ⌜ ↩ {𝔽⌜○ToArray} ¨ ↩ {(𝔽⌜)⊘(𝔽_eachd○ToArray)} match←{(0⊑𝕨)◶(1⊑𝕨)‿𝕩}´⟨ ⟨=○IsArray, 0⟩ ⟨IsArray∘⊢, =⟩ ⟨=○= , 0⟩ ⟨1×´=¨○≢ , 0⟩ {1×´⥊𝕨Match¨𝕩} ⟩ Indices←{ ! 1==𝕩 l←≠𝕩 { ! 1×´Nat¨𝕩 k←l-1 N ← ((⊢+-×0=𝕩⊑˜⊢)`k⊸-⌜↕l)⊑˜k-⊢ # Next nonzero E ← ⊑⟜(+`𝕩) ei←E i←N 0 {{ei↩E i↩N𝕩+1⋄i}⍟(𝕩=ei)i}¨↕E k }⍟(0) ⊘ ×) _perv ÷ ↩ ÷ _perv ⋆ ↩ ⋆ _perv √ ← ⋆⟜(÷2) ⊘ (⋆⟜÷˜) | ← (×⟜× ⊘ {𝕩-𝕨×⌊𝕩÷𝕨}) _perv ⌊ ↩ (⌊ ⊘ {(𝕨>𝕩)⊑𝕨‿𝕩}) _perv ⌈ ← (-∘⌊∘- ⊘ {(𝕨<𝕩)⊑𝕨‿𝕩}) _perv ¬ ← 1+- ∧ ← × ∨ ← (+-×) < ↩ {⟨⟩⥊⟨𝕩⟩} ⊘ ((1-≤˜) _perv) > ↩ (1-≤) _perv ≠ ↩ ≠ ⊘ ((1-=) _perv) = ↩ = ⊘ (= _perv) ≥ ← !∘0 ⊘ (≤˜_perv) ≤ ↩ !∘0 ⊘ (≤ _perv) identity ← (0⊑⟨!∘0⟩) {(0⊑𝕨){𝕗=𝕩}◶𝕩‿(1⊑𝕨)}´ ⟨+‿0,-‿0,×‿1,÷‿1,⋆‿1,√‿1,∧‿1,∨‿0,|‿0,⌊‿∞,⌈‿¯∞,<‿0,≤‿1,=‿1,≥‿1,>‿0,≠‿0⟩ #⌜ # LAYER 3: Remove other limits # Now all implementations are full except ∾ and ⊑; ↕ is monadic only Deshape←IsArray◶{⟨𝕩⟩}‿⥊ Reshape←{ ! 1≥=𝕨 𝕨↩Deshape 𝕨 ! ∧´Nat¨𝕨 l←×´𝕨 n←×´≢𝕩 𝕨⥊{ 𝕩(0 ↩ Merge ⊘ > ≍ ← >∘Pair _ranks ← {⟨2⟩⊘⟨1,0⟩((⊣-1+|)˜⟜≠⊑¨<∘⊢)⥊∘𝔽} _depthOp_←{ neg←0>n←𝕨𝔾_ranks𝕩 ⋄ F←𝔽 _d←{ R←(𝕗+neg)_d 𝕨(×⟜2⊸+´2⥊(neg∧𝕗≥0)∨(0⌈𝕗)≥Pair○≡)◶(⟨R¨⋄R⟜𝕩¨∘⊣⋄(𝕨R⊢)¨∘⊢⋄F⟩)𝕩 } 𝕨 n _d 𝕩 } ⚇ ← _depthOp_ _rankOp_←{ k←𝕨(Pair○= (0≤⊢)◶⟨⌊⟜-,0⌈-⟩¨ 𝔾_ranks)𝕩 Enc←{ f←⊑⟜(≢𝕩)¨↕𝕨 c←×´s←𝕨Cell𝕩 f⥊⊑⟜(⥊𝕩)¨∘((s⥊↕c)+c×⊢)¨↕×´f } Enc↩(>⟜0+≥⟜=)◶⟨<⊢,Enc,<¨⊢⟩ > ((0⊑k)Enc𝕨) 𝔽¨ ((1-˜≠)⊸⊑k)Enc𝕩 } ⎉ ← _rankOp_ ˘ ← {𝔽⎉¯1} _insert←{ ! 1≤=𝕩 𝕨 𝔽´ <˘𝕩 } ˝ ← _insert #⌜ # LAYER 5: Structural functions _onAxes_←{ F←𝔽 (𝔾<≡)∘⊣◶{ # One axis ! 1≤=𝕩 𝕨F𝕩 }‿{ # Multiple axes ! 1≥=𝕨 ! 𝕨≤○≠≢𝕩 R←{(0⊑⥊𝕨)F(1 DropV 𝕨)⊸R˘𝕩}⍟{0<≠𝕨} 𝕨R𝕩 } } SelSub←{ ! IsArray 𝕨 ! ∧´⥊Int¨ 𝕨 ! ∧´⥊ 𝕨 (≥⟜-∧<) ≠𝕩 𝕨↩𝕨+(≠𝕩)×𝕨<0 𝕨(1≠=∘⊢)◶{ ⊑⟜𝕩¨𝕨 }‿{ c←×´s←1 Cell 𝕩 ⊑⟜(⥊𝕩)¨(c×𝕨)+⌜s⥊↕c }𝕩 } Select←ToArray⊸(SelSub _onAxes_ 1) ⊏ ← 0⊸Select ⊘ Select JoinTo←∨○(1≠=)◶∾‿{ s←𝕨Pair○≢𝕩 a←1⌈´k←≠¨s ! ∧´1≥a-k c←(k¬a)+⟜(↕a-1)⊸⊏¨s ! ≡´c l←+´(a=k)⊣◶1‿(0⊑⊢)¨s (⟨l⟩∾0⊑c)⥊𝕨∾○⥊𝕩 } Take←{ T←{ ! Int 𝕨 l←≠𝕩 ⋄ n←𝕨<0 ⋄ e←l⌊r←|𝕨 ⋄ s←⟨r⟩ i ← 𝕩{s∾↩c←1 Cell 𝕨⋄𝕩(×+⌜↕∘⊢)×´c}⍟(1≠=𝕩) (l-e)+⍟n ↕e s ⥊ 𝕩{(⥊𝕩)n◶⟨∾,∾˜⟩(r-e)⥊Type𝕗}⍟(l0)+(-s)⌈s⌊𝕨)↑𝕩 } Suffixes ← {!1≤=𝕩 ⋄ (↕1+≠𝕩)Drop¨<𝕩} ↓ ← Suffixes ⊘ Drop Windows←{ ! IsArray 𝕩 ! 1≥=𝕨 ! 𝕨≤○≠≢𝕩 ! ∧´Nat¨⥊𝕨 s←(≠𝕨)↑≢𝕩 ! ∧´𝕨≤1+s 𝕨{(∾⟜(𝕨≠⊸↓≢𝕩)∘≢⥊>)<¨⊸⊏⟜𝕩¨s(¬+⌜○↕⊢)⥊𝕨}⍟(0<≠𝕨)𝕩 } Reverse ← {!1≤=𝕩 ⋄ (-↕⊸¬≠𝕩)⊏𝕩} Rotate ← {!Int𝕨 ⋄ l←≠𝕩⋄(l|𝕨+↕l)⊏𝕩} _onAxes_ 0 Rep ← Indices⊸⊏ Replicate ← {0<=𝕨}◶(⥊˜⟜≠Rep⊢)‿{!𝕨=○≠𝕩⋄𝕨Rep𝕩} _onAxes_ (1-0=≠) ↕ ↩ Range ⊘ Windows ⌽ ← Reverse ⊘ Rotate / ← Indices ⊘ Replicate #⌜ # LAYER 6: Everything else Join←(1≠=)◶⟨∨´1≠=¨,1⟩◶{ # List of lists i←j←¯1⋄e←⟨⟩⋄a←𝕩 {{e↩a⊑˜i↩𝕩⋄j↩¯1}⍟(i⊸≠)𝕩⋄(j↩j+1)⊑e}¨/≠¨𝕩 }‿{ # Multidimensional C←(<⟨⟩)⥊⊸∾⌜´⊢ # Cartesian array product ! IsArray 𝕩 s←≢¨𝕩 d←≠0⊑⥊s ! ∧´⥊d=≠¨s ! d≥=𝕩 l←(≢𝕩){(𝕩⊑⟜≢a Pick1˜(j=𝕩)⊸×)¨↕𝕨}¨j←↕r←=a←𝕩 ! (r↑¨s)≡C l i←C{p←+´¨↑𝕩⋄(↕0⊑⌽p)-𝕩/¯1↓p}¨l >i<¨⊸⊏¨l/𝕩 }⍟(0<≠∘⥊) Group←{ ! IsArray 𝕩 Chk←{!1==𝕩⋄!∧´Int¨𝕩⋄!∧´¯1≤𝕩⋄≠𝕩} l←(1<≡)◶Chk‿{!1==𝕩⋄Chk¨𝕩}𝕨 ! l≤○≠≢𝕩 ! ∧´l=l≠⊸↑≢𝕩 (𝕨⊸=/𝕩˜)¨↕1+¯1⌈´⚇1𝕨 } ∾ ↩ Join ⊘ JoinTo ⊔ ← Group⟜(↕≠⚇1) ⊘ Group Pick1←{ ! 1==𝕨 ! 𝕨=○≠s←≢𝕩 ! ∧´Int¨𝕨 ! ∧´𝕨(≥⟜-∧<)s 𝕨↩𝕨+s×𝕨<0 (⥊𝕩)⊑˜0(⊑⟜𝕨+⊑⟜s×⊢)´-↕⊸¬≠𝕨 } Pickd←(∨´∘⥊IsArray¨∘⊣)◶Pick1‿{Pickd⟜𝕩¨𝕨} Pick←IsArray◶⥊‿⊢⊸Pickd ⊑ ↩ (0¨∘≢)⊸Pick ⊘ Pick ◶ ↩ {𝕨((𝕨𝔽𝕩)⊑𝕘){𝔽}𝕩} # Same definition, new Pick # Searching IndexOf←{ c←1-˜=𝕨 ! 0≤c 𝕨 (0<≠𝕨)◶⟨0⎉c∘⊢,(+˝∧`)≢⌜○((0⊑u IndexOf 𝕩}◶{u↩u∾𝕩⋄1}‿0˘𝕩 } Find←{ r←=𝕨 ! r≤=𝕩 𝕨 ≡⎉r (≢𝕨) ↕⎉r 𝕩 } ⊐ ← !∘0 ⊘ IndexOf ∊ ← UniqueMask ⊘ (⊐˜<≠∘⊢) ⍷ ← ∊⊸/ ⊘ Find ReorderAxes←{ 𝕩↩<⍟(0=≡)𝕩 ! 1≥=𝕨 𝕨↩⥊𝕨 ! 𝕨≤○≠≢𝕩 ! ∧´Nat¨⥊𝕨 r←(=𝕩)-+´¬∊𝕨 ! ∧´𝕨)i m }○(((-1+↕r)+≠)⊸{⊑⟜𝕩¨𝕨})𝕩 ⟨l,c⟩ }𝕩 } _getCellCmp ← { Ci←𝔽⋄l←𝕨⋄c←𝕩 Cc←{ a←𝕨⋄b←𝕩 S←(l⊸=)◶{S∘(1+𝕩)⍟(0⊸=)a Ci○(𝕩⊸+)b}‿c S 0 } (1≠l)⊑(𝕩⍟(0⊸=)𝔽)‿Cc } Cmp ← ∨○IsArray◶(>-<)‿{ lc←𝕨(𝕨-○IsArray𝕩)_cmpLen○≢𝕩 cc ← (⊑⟜(⥊𝕨))⊸Cmp⟜(⊑⟜(⥊𝕩)) _getCellCmp´ lc Cc˜0 } _binSearch ← { B ← 𝔽 { R←{𝕨{a←B m←𝕩+h←⌊𝕨÷2⋄(h+a×2|𝕨)R a⊑𝕩‿m}⍟(>⟜1)𝕩} 1+(𝕩+1)R ¯1 }⍟(0⊸<) } _grade←{ ! 1≤=𝕩 m←×´1 Cell 𝕩 cc←m 𝔽○(⊑⟜(⥊𝕩)) _getCellCmp 0 GT←Cc>0˜ l←≠𝕩 (↕l){ i←-d←𝕨 ⋄ j←ei←ej←0 e←3 ⋄ c←⟨GT○(⊑⟜𝕩),0,1,2⟩ N←{i↩d+𝕨⋄ej↩l⌊d+ei↩l⌊j↩d+𝕩⋄e↩j≥l⋄i R j} R←{𝕨e◶c𝕩}◶{e+↩2×ei=i↩1+𝕨⋄𝕨}‿{e+↩ej=j↩1+𝕩⋄𝕩}‿N {𝕩⋄i R j}¨⊸⊏𝕩 }´2⋆⌽↕⌈2 Log 1⌈l } _bins←{ c←1-˜=𝕨 ! 0≤c ! c≤=𝕩 lw←×´sw←1 Cell 𝕨 cw←lw 𝔽○(⊑⟜(⥊𝕨)) _getCellCmp 0 ! 0⊸<◶⟨1,∧´0≤˜·cw¨⟜(lw⊸+)lw×↕∘-⟜1⟩≠𝕨 cx←c-˜=𝕩 sx←cx Cell 𝕩 ⋄ lc←sw 0 _cmpLen sx cc ← (⊑⟜(⥊𝕨))⊸𝔽⟜(⊑⟜(⥊𝕩)) _getCellCmp´ lc B←(×´sw)⊸×⊸Cc≤0˜ (≠𝕨) {B⟜𝕩 _binSearch 𝕨}¨ (×´sx) × ⥊⟜(↕×´)⊑⟜(≢𝕩)¨↕cx } ⍋ ← Cmp _grade ⊘ ( Cmp _bins) ⍒ ← -∘Cmp _grade ⊘ (-∘Cmp _bins) ∧ ↩ ⍋⊸⊏ ⊘ ∧ ∨ ↩ ⍒⊸⊏ ⊘ ∨ OccurrenceCount ← ⊐˜(⊢-⊏)⍋∘⍋ ProgressiveIndexOf ← {𝕨⊐○(≍˘⟜OccurrenceCount𝕨⊸⊐)𝕩} ⊒ ← OccurrenceCount⊘ ProgressiveIndexOf inverse ← {(⊑(0⊏𝕩)⊐<) ⊑ ((1⊏𝕩)∾⟨!∘0⟩)˜} ⍉ (2∾˜2÷˜≠)⊸⥊ ⟨ +, +⊘(-˜) -, - ×, ⊢⊘(÷˜) ÷, ÷ ⋆, Log _perv √, ⋆⟜2⊘(⋆˜) ∧, ⊢⊘(÷˜) ∨, ⊢⊘(-˜÷1-⊢) <, {!IsArray𝕩⋄!0==𝕩⋄⊑𝕩}⊘(!∘0) /, {!(⍋≡↕∘≠)𝕩⋄≠¨⊔𝕩}⊘(!∘0) ⟩ ⁼ ← {Inverse 𝕗} _repeat_←{ n←𝕨𝔾𝕩 l←u←0 {!Int𝕩⋄l↩l⌊𝕩⋄u↩u⌈𝕩}⚇0 n a←𝕩⋄_p←{𝔽∘⊣`(1+𝕩)⥊