aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-27 13:22:36 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-04-27 13:22:36 -0400
commita4db0473afa642b1e4085295a6e306198b3c6f5d (patch)
tree5295726d78cd930fd9e6af16b7b620bbd61c5d70 /src
parentdbec100d95caea139507c458dffc8aa80b9285e8 (diff)
Group-based structural Under insertion
Diffstat (limited to 'src')
-rw-r--r--src/r.bqn18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/r.bqn b/src/r.bqn
index eb1dc9b8..d016b3c5 100644
--- a/src/r.bqn
+++ b/src/r.bqn
@@ -323,18 +323,14 @@ _under_←{
}⍟(1-IsStructErr∘⊢)
Struct←{
Set1←𝕨⊸{
- 𝕩↩<⍟(1-IsArray)𝕩
- l←1×´s←≢𝕩
+ 𝕩↩ToArray𝕩
+ s←≢𝕩⋄l←≠d←⥊𝕩
i←0⊸⊑⌜𝕨
- g←Cmp0 _grade_ 0 i
- v←(1⊑⊑⟜𝕨)⌜g
- P←(≠g)⊸≤◶⟨(⊑⟜g)⊑i˙,l⟩
- e←P j←0
- s⥊{e=𝕩}◶⟨⊑⟜(⥊𝕩),{𝕩
- r←j⊑v⋄e↩{𝕊∘{𝕩
- "⌾: Incompatible result elements in structural Under"!r Match j⊑v
- }⍟(e=⊢)P j↩1+j}0⋄r
- }⟩⌜↕l
+ gl←l GroupLen i ⋄ g←gl GroupOrd i
+ Sel←1⊑𝕨⊑˜⊑⟜g
+ j←0⋄Adv←Sel{(j+↩𝕩)-1}
+ CM←"⌾: Incompatible result elements in structural Under"!Match⟜Sel
+ s⥊2⊸⌊◶⟨⊑⟜d,Adv,Adv{(𝕨CM(j-𝕩)⊸+)⌜↕𝕩-1⋄𝕨}⊢⟩⟜(⊑⟜gl)⌜↕l
}
_at_ ← {𝔽⍟((𝔾𝕩)=⊣)⟜(⊑⟜𝕩)⌜ ↕≠𝕩}
Set ← 0⊸{ (𝕨≥≠root)◶⟨≢⥊(1+𝕨)⊸𝕊_at_(𝕨⊑root˙)∘⥊, Set1⟩ 𝕩 }