aboutsummaryrefslogtreecommitdiff
path: root/impl.bqn
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-02 22:23:53 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-02 22:27:18 -0400
commitc35791a84fe0a34c61704cead61af21dee352efc (patch)
treef05bc5cb92669863a968aeada075a7827a2b7351 /impl.bqn
parente1ce7b201e662757b62c480c8ae1c76e41ad8a5f (diff)
Performance improvements to Each and pervasion
Diffstat (limited to 'impl.bqn')
-rw-r--r--impl.bqn24
1 files changed, 15 insertions, 9 deletions
diff --git a/impl.bqn b/impl.bqn
index 3af5e1d0..2682249f 100644
--- a/impl.bqn
+++ b/impl.bqn
@@ -33,23 +33,29 @@ ToArray ← <⍟(1-IsArray)
∾ ← {k←≠𝕨⋄k⊸≤◶⟨⊑⟜𝕨⋄-⟜k⊑𝕩˜⟩⌜↕k+≠𝕩} # LIMITED to two vector arguments
_eachd←{
+ _d←{ # Equal ranks
+ p←≢𝕨
+ ! 1(⊑⟜p=⊑⟜(≢𝕩))⊸×´↕=𝕨
+ p⥊ (⊑⟜(⥊𝕨)𝔽⊑⟜(⥊𝕩))⌜↕1×´p
+ }
_e←{ # 𝕨 has smaller or equal rank
- k←≠p←≢𝕨 ⋄ q←≢𝕩
- ! 1×´(⊑⟜p=⊑⟜q)⌜↕k
- l←1×´(q⊑˜k⊸+)⌜↕q≠⊸-k
+ p←≢𝕨 ⋄ k←=𝕨 ⋄ q←≢𝕩
+ ! 1(⊑⟜p=⊑⟜q)⊸×´↕k
+ l←1(q⊑˜k⊸+)⊸×´↕(=𝕩)-k
a←⥊𝕨 ⋄ b←⥊𝕩
q⥊⥊(≠a) (⊑⟜a𝔽l⊸×⊸+⊑b˜)⌜○↕ l
}
- (>○=)◶⟨𝔽_e⋄𝔽˜_e˜⟩
+ =○=◶⟨>○=◶⟨𝔽_e⋄𝔽˜_e˜⟩⋄𝔽_d⟩
}
-⌜ ↩ {𝔽⌜○ToArray}
-¨ ↩ {(𝔽⌜)⊘(𝔽_eachd○ToArray)}
-
_perv←{ # Pervasion
- (⊢⊘(+-×)○IsArray)◶⟨𝔽⋄𝔽{𝕨𝔽_perv𝕩}¨⟩
+ R←𝔽{𝕨𝔽_perv𝕩}
+ +○IsArray◶⟨𝔽⋄R⌜⊘(>○IsArray◶{𝕨{𝕗R𝕩}⌜𝕩}‿{𝕩{𝕩R𝕗}⌜𝕨})⋄R _eachd⟩
}
+⌜ ↩ {𝔽⌜○ToArray}
+¨ ↩ {(𝔽⌜)⊘(𝔽_eachd○ToArray)}
+
+ ↩ + _perv
- ↩ - _perv
× ↩ (0⊸(<->) ⊘ ×) _perv
@@ -68,7 +74,7 @@ _perv←{ # Pervasion
= ↩ = ⊘ (= _perv)
≤ ↩ !∘0 ⊘ (≤ _perv)
≥ ← !∘0 ⊘ (≤˜_perv)
-identity ← {(0⊑𝕨){𝕗=𝕩}◶𝕩‿(1⊑𝕨)}´ ⟨+‿0,-‿0,×‿1,÷‿1,⋆‿1,√‿1,∧‿1,∨‿0,|‿0,⌊‿∞,⌈‿¯∞,<‿0,≤‿1,=‿1,≥‿1,>‿0,≠‿0,0⊑⟨!∘0⟩⟩
+identity ← (0⊑⟨!∘0⟩) {(0⊑𝕨){𝕗=𝕩}◶𝕩‿(1⊑𝕨)}´ ⟨+‿0,-‿0,×‿1,÷‿1,⋆‿1,√‿1,∧‿1,∨‿0,|‿0,⌊‿∞,⌈‿¯∞,<‿0,≤‿1,=‿1,≥‿1,>‿0,≠‿0⟩
#⌜