From d02b085fef5848ec23f65c2951ccce36ee28e9e0 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sun, 2 May 2021 13:34:58 -0400 Subject: Non-pervasive Rank, Depth, and Repeat modifiers --- src/r1.bqn | 78 +++++++++++++++++++++++++++++++------------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) (limited to 'src') diff --git a/src/r1.bqn b/src/r1.bqn index dedf3125..8c3519fc 100644 --- a/src/r1.bqn +++ b/src/r1.bqn @@ -48,9 +48,8 @@ _fold←{ _eachd←{ _d←{ # Equal ranks - p←≢𝕨 - "Mapping: Equal-rank argument shapes don't agree" ! p MatchS ≢𝕩 - p⥊𝕨𝔽¨○⥊𝕩 + "Mapping: Equal-rank argument shapes don't agree" ! 𝕨 MatchS○≢ 𝕩 + 𝕨𝔽¨𝕩 } _e←{ # 𝕨 has smaller or equal rank p←≢𝕨 ⋄ k←=𝕨 ⋄ q←≢𝕩 @@ -334,7 +333,7 @@ match←{(0⊑𝕨)◶(1⊑𝕨)‿𝕩}´⟨ ⟨IsArray∘⊢, =⟩ ⟨=○= , 0⟩ ⟨MatchS○≢ , 0⟩ - {1×´𝕨Match¨○⥊𝕩} + {1×´⥊𝕨Match¨𝕩} ⟩ Depth←IsArray◶0‿{1+0⌈´Depth⌜⥊𝕩} @@ -587,7 +586,6 @@ Reshape←{ 𝕩(0𝕩)⊑𝕨‿𝕩}) _perv -⌈ ↩ (-∘⌊∘- ⊘ {(𝕨<𝕩)⊑𝕨‿𝕩}) _perv -∧ ← ⍋⊸⊏ ⊘ (× _perv) -∨ ← ⍒⊸⊏ ⊘ ((+-×) _perv) -× ↩ (0⊸(<->) ⊘ ×) _perv -< ↩ < ⊘ ((1-≥) _perv) -> ↩ Merge ⊘ ((1-≤) _perv) -≠ ↩ ≠ ⊘ ((1-=) _perv) -= ↩ = ⊘ (= _perv) -≥ ← ("≥: No monadic form"!0˙) ⊘ (≥ _perv) -≤ ↩ ("≤: No monadic form"!0˙) ⊘ (≤ _perv) -+ ↩ + _perv -- ↩ - _perv -¬ ← 1+- - ValidateRanks←{ "⎉ or ⚇: 𝔽 result must have rank at most 1" ! 1≥=𝕩 - 𝕩↩⥊𝕩 - "⎉ or ⚇: 𝔽 result must have 1 to 3 elements" ! (1⊸≤∧≤⟜3)≠𝕩 - "⎉ or ⚇: 𝔽 result must consist of integers" ! 1∧´Int⌜𝕩 - 𝕩 + 𝕩↩Deshape𝕩 + "⎉ or ⚇: 𝔽 result must have 1 to 3 elements" ! (1⊸≤×≤⟜3)≠𝕩 + "⎉ or ⚇: 𝔽 result must consist of integers" ! 1×´Int⌜𝕩 + 𝕩 ⊏˜ (≠𝕩)⊸(-+1-˜⌊∘÷˜×⊣)⌜ 𝕨 } -_ranks ← {⟨2⟩⊘⟨1,0⟩ ((⊣-1+|)˜⟜≠⊑⌜<∘⊢) ValidateRanks∘𝔽} +_ranks ← {⟨2⟩⊘⟨1,0⟩ ValidateRanks 𝔽} _depthOp_←{ - neg←0>n←𝕨𝔾_ranks𝕩 ⋄ F←𝔽 + neg←0⊸>⌜n←𝕨𝔾_ranks𝕩 ⋄ F←𝔽 _d←{ - R←(𝕗+neg)_d - 𝕨(×⟜2⊸+´2 Reshape (neg∧𝕗≥0)∨(0⌈𝕗)≥Pair○≡)◶⟨ - R _each, R⟜𝕩_table∘⊣, (𝕨R⊢)_table∘⊢, F - ⟩𝕩 + r←0 ⋄ GR←𝕗{𝕩⋄gr↩0⋄R↩(𝕗+¨neg)_d} + Tw‿Tx←⟨1⟩⊸∾⍟(2>≠)neg{(𝕨×0≤𝕩)⊑⟨(0⌈𝕩)≥≡,1⟩}¨𝕗 + (2×Tw)⊸+⟜Tx◶⟨ + {GR 0⋄𝕨R _each𝕩}, {GR 0⋄R⟜𝕩_table𝕨}, {GR 0⋄(𝕨R⊢)_table𝕩}, F + ⟩ } 𝕨 n _d 𝕩 } _rankOp_←{ k←𝕨(Pair○= (0≤⊢)◶⟨⌊⟜-,0⌈-⟩¨ 𝔾_ranks)𝕩 Enc←(>⟜0×1+≥⟜=)◶⟨<⊢,EncCell,<_table⊢⟩ - > ((0⊑k)Enc𝕨) 𝔽_each ((1-˜≠)⊸⊑k)Enc𝕩 + Merge ((0⊑k)Enc𝕨) 𝔽_each ((1-˜≠)⊸⊑k)Enc𝕩 } _repeat_←{ @@ -666,7 +646,7 @@ _repeat_←{ n←𝕨𝔾𝕩 Multi←{ l←u←0 - {"⍟: Repetition numbers in 𝕨𝔾𝕩 must be integers"!Int𝕩⋄l↩l⌊𝕩⋄u↩u⌈𝕩}_perv n + {"⍟: Repetition numbers in 𝕨𝔾𝕩 must be integers"!Int𝕩⋄l⌊↩𝕩⋄u⌈↩𝕩}_perv n i←⟨𝕩⟩⋄P←B⊸{𝕎`i∾↕𝕩} pos←f P u neg←f 0⊸<◶⟨i,Inverse⊸P⟩ -l @@ -675,6 +655,26 @@ _repeat_←{ (Nat n)◶Multi‿{𝕩(B f)∘⊢´↕n} 𝕩 } +÷ ↩ ÷ _perv +⋆ ↩ ⋆ _perv +√ ← ⋆⟜(÷2) ⊘ (⋆⟜÷˜) +| ← (| ⊘ {𝕩-𝕨×⌊𝕩÷𝕨}) _perv +⌊ ↩ (⌊ ⊘ {(𝕨>𝕩)⊑𝕨‿𝕩}) _perv +⌈ ↩ (-∘⌊∘- ⊘ {(𝕨<𝕩)⊑𝕨‿𝕩}) _perv +∧ ← ⍋⊸⊏ ⊘ (× _perv) +∨ ← ⍒⊸⊏ ⊘ ((+-×) _perv) +× ↩ (0⊸(<->) ⊘ ×) _perv +< ↩ < ⊘ ((1-≥) _perv) +> ↩ Merge ⊘ ((1-≤) _perv) +≠ ↩ ≠ ⊘ ((1-=) _perv) += ↩ = ⊘ (= _perv) +≥ ← ("≥: No monadic form"!0˙) ⊘ (≥ _perv) +≤ ↩ ("≤: No monadic form"!0˙) ⊘ (≤ _perv) ++ ↩ + _perv +- ↩ - _perv +¬ ← 1+- + +⥊ ↩ Deshape ⊘ ⥊ ↕ ↩ Range ⊘ Windows ⌽ ← Reverse ⊘ (Rot _onAxes_ 0) / ← Indices ⊘ Replicate -- cgit v1.2.3