aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-01-11 21:58:37 -0500
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-01-11 22:03:26 -0500
commit4df717aa072f1550fa4740c5413b551428b1119c (patch)
tree764b198074d70db09e9d64e54510b102764a67de /src
parent6a256ca9562cd593b68e312c3c4de5146272db04 (diff)
Some structural Under infrastructure
Diffstat (limited to 'src')
-rw-r--r--src/r.bqn31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/r.bqn b/src/r.bqn
index 55c10950..5fd2e620 100644
--- a/src/r.bqn
+++ b/src/r.bqn
@@ -163,18 +163,29 @@ SelSub←{
}
First ← (0<≠)◶⟨GetFill,0⊸⊑⟩ Deshape
+¨ ↩ {𝕨(𝔽⌜)⊘(𝔽_eachd)○ToArray𝕩}
+
_under_←{
i←↕l←1×´s←≢𝕩
- v←𝕨𝔽○𝔾𝕩 ⋄ gi←𝔾s⥊i
- n←(IsArray gi)⊑{⟨𝕩⟩}‿⥊ ⋄ v↩N v ⋄ gi↩N gi
- g←Cmp0 _grade_ 0 gi
- P←(≠g)⊸≤◶⟨(⊑⟜g)⊑gi˜,l⟩
- e←P j←0
- s⥊{e=𝕩}◶⟨⊑⟜(⥊𝕩),{𝕩⋄r←(j⊑g)⊑v⋄e↩P j↩1+j⋄r}⟩⌜i
+ v←𝕨𝔽○𝔾𝕩 ⋄ root‿elem←𝔾_structural 𝕩
+ Captures←IsArray∘⊣◶⟨1, {𝕨◶0‿𝕩}´⟨IsArray⊢, =○=, 1×´=¨○≢, {1×´⥊𝕨Captures¨𝕩}⟩⟩
+ ! elem Captures v
+ Set←{
+ Set1←𝕨⊸{
+ i←↕l←1×´s←≢𝕩
+ nv‿gi←((IsArray 𝕨)⊑{⟨𝕩⟩}‿⥊)¨ v‿𝕨
+ ! 1×´Nat⌜gi
+ g←Cmp0 _grade_ 0 gi
+ P←(≠g)⊸≤◶⟨(⊑⟜g)⊑gi˙,l⟩
+ e←P j←0
+ s⥊{e=𝕩}◶⟨⊑⟜(⥊𝕩),{𝕩⋄r←(j⊑g)⊑nv⋄e↩P j↩1+j⋄r}⟩⌜i
+ }
+ _at_←{(𝔾{𝕨⊸=⌜𝕩}↕∘≠) 𝔽⍟⊣¨ ⊢}
+ 0 { (𝕨≥≠root)◶⟨≢⥊(1+𝕨)⊸𝕊_at_(𝕨⊑root˙)∘⥊, Set1⟩𝕩 } 𝕩
+ }
+ elem (IsArray root)◶⟨v˙_perv elem˙, Set⟩ 𝕩
}
-¨ ↩ {𝕨(𝔽⌜)⊘(𝔽_eachd)○ToArray𝕩}
-
match←{(0⊑𝕨)◶(1⊑𝕨)‿𝕩}´⟨
⟨=○IsArray, 0⟩
⟨IsArray∘⊢, =⟩
@@ -701,3 +712,7 @@ FuncInverse ← (⊑ ⊣◶⟨
⟩ 1⊸↓) Decompose
Inverse ← Type◶(3‿1‿2/{⊢⊣𝕩IX∘≡⊢}‿FuncInverse‿("Cannot invert modifier"!0˙))
⁼ ↩ {𝕗 (≢∧INF˙⊸≢)◶0‿(5‿_inv_≢0‿¯2⊏Decompose∘⊢)◶⊢‿{𝕏_inv_(𝕎_invChk_𝕏)} Inverse 𝕗}
+
+_structural←{
+ ⟨⟩‿(𝔽⥊⟜(↕1×´⊢)≢𝕩)
+}