aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-03-25 22:38:49 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-03-25 22:38:49 -0400
commit7be65886036969a93efd06d77f59730a157c0498 (patch)
tree5c18760cd84f6d6797cc796a81005802cb42062c /src
parentc273d7e00774cc145e639d4302f7167fb43faf19 (diff)
Use characters for glyph searches
Diffstat (limited to 'src')
-rw-r--r--src/r.bqn132
1 files changed, 67 insertions, 65 deletions
diff --git a/src/r.bqn b/src/r.bqn
index a2af82bb..a42f1a35 100644
--- a/src/r.bqn
+++ b/src/r.bqn
@@ -424,16 +424,6 @@ _onAxes_←{
+ ↩ + _perv
- ↩ - _perv
¬ ← 1+-
-identity ← {(0⊑𝕨)˙⊸=◶𝕩‿(1⊑𝕨)}´ ⟨
- +‿0 , -‿0
- ×‿1 , ÷‿1
- ⋆‿1 , ¬‿1
- ⌊‿∞ , ⌈‿¯∞
- ∨‿0 , ∧‿1
- ≠‿0 , =‿1
- >‿0 , ≥‿1
- "´: Identity not found"!0˙
-⟩
HomFil ← {((𝕎0) Fill 𝕏)⊘𝕏}⍟(+´⟨=,≠,≡,≢⟩=⊣)
Reshape←{
@@ -714,6 +704,23 @@ JoinPrim ← ∾
⊒ ← OccurrenceCount⊘ ProgressiveIndexOf
⍷ ← ∊⊸/ ⊘ Find
+_glyphLookup_ ← {
+ (0+´·∧`𝕗≠{Glyph𝕩})⊑(∾´𝕘)˙
+}
+_lookup_ ← {
+ s ← 2×↕(≠𝕘)÷2
+ (s⊏𝕘) _glyphLookup_ ((1+s)⊏𝕘)‿𝕗
+}
+Identity ← {𝕏0} ("´: Identity not found"!0˙) _lookup_ ⟨
+ '+',0 , '-',0
+ '×',1 , '÷',1
+ '⋆',1 , '¬',1
+ '⌊',∞ , '⌈',¯∞
+ '∨',0 , '∧',1
+ '≠',0 , '=',1
+ '>',0 , '≥',1
+⟩
+
IA ← "⁼: Inverse failed"⊸!
IX ← "⁼: Inverse does not exist"⊸!
INF← "⁼: Inverse not found"!0˙
@@ -732,66 +739,61 @@ GroupInv ← {
IA ∧´Nat⌜𝕨
(⊔𝕨) ⍋⊸⊏○∾ 𝕩
}
-_lookup_ ← {
- s ← 2×↕(≠𝕘)÷2
- (⊑(s⊏𝕘)⊐<) ⊑ (((1+s)⊏𝕘)∾⟨𝕗⟩)˙
-}
PrimInverse ← INF _lookup_ ⟨
- +, +⊘(-˜)
- -, -
- ×, ⊢⊘(÷˜)
- ÷, ÷
- ⋆, Log _perv
- √, ט⊘(⋆˜)
- ∧, ⊢_invChk_∧⊘(÷˜)
- ∨, ⊢_invChk_∨⊘(-˜÷1-⊣)
- ¬, ¬
- <, {IX IsArray𝕩⋄IX 0==𝕩⋄⊑𝕩}⊘(IA∘0)
- ⊢, ⊢
- ⊣, ⊢⊘(⊢⊣IX∘≡)
- ∾, IA∘0 ⊘ {d←𝕩-○=𝕨⋄IX(0⊸≤∧≤⟜1)d⋄l←d◶1‿≠𝕨⋄IX l≤≠𝕩⋄IX 𝕨≡d◶⟨⊏,l⊸↑⟩𝕩⋄l↓𝕩}
- ≍, {IX 1=≠𝕩⋄⊏𝕩} ⊘ {IX 2=≠𝕩⋄IX 𝕨≡⊏𝕩⋄1⊏𝕩}
- ↑, ¯1⊸⊑_invChk_↑ ⊘ (IA∘0)
- ↓, ⊑_invChk_↓ ⊘ (IA∘0)
- ↕, ≢_invChk_↕ ⊘ (IA∘0) # Should trace edge and invChk
- ⌽, ⌽ ⊘ (-⊸⌽)
- ⍉, TransposeInv ⊘ ReorderAxesInv
- /, {IA 1==𝕩⋄IA∧´Nat⌜𝕩⋄IX(∧´¯1⊸↓≤1⊸↓)𝕩⋄GroupLen𝕩}⊘(IA∘0)
- ⊔, GroupIndsInv ⊘ GroupInv
+ '+', +⊘(-˜)
+ '-', -
+ '×', ⊢⊘(÷˜)
+ '÷', ÷
+ '⋆', Log _perv
+ '√', ט⊘(⋆˜)
+ '∧', ⊢_invChk_∧⊘(÷˜)
+ '∨', ⊢_invChk_∨⊘(-˜÷1-⊣)
+ '¬', ¬
+ '<', {IX IsArray𝕩⋄IX 0==𝕩⋄⊑𝕩}⊘(IA∘0)
+ '⊢', ⊢
+ '⊣', ⊢⊘(⊢⊣IX∘≡)
+ '∾', IA∘0 ⊘ {d←𝕩-○=𝕨⋄IX(0⊸≤∧≤⟜1)d⋄l←d◶1‿≠𝕨⋄IX l≤≠𝕩⋄IX 𝕨≡d◶⟨⊏,l⊸↑⟩𝕩⋄l↓𝕩}
+ '≍', {IX 1=≠𝕩⋄⊏𝕩} ⊘ {IX 2=≠𝕩⋄IX 𝕨≡⊏𝕩⋄1⊏𝕩}
+ '↑', ¯1⊸⊑_invChk_↑ ⊘ (IA∘0)
+ '↓', ⊑_invChk_↓ ⊘ (IA∘0)
+ '↕', ≢_invChk_↕ ⊘ (IA∘0) # Should trace edge and invChk
+ '⌽', ⌽ ⊘ (-⊸⌽)
+ '⍉', TransposeInv ⊘ ReorderAxesInv
+ '/', {IA 1==𝕩⋄IA∧´Nat⌜𝕩⋄IX(∧´¯1⊸↓≤1⊸↓)𝕩⋄GroupLen𝕩}⊘(IA∘0)
+ '⊔', GroupIndsInv ⊘ GroupInv
⌜ ↩ {𝕨𝔽⌜_fillByPure_𝔽○ToArray𝕩}
_inv_ ← {𝕘⋄𝕨𝔽𝕩}
AtopInverse ← {(𝕏𝕎)⊘(𝕏⟜𝕎)}○{Inverse𝕩}
Mod1Inverse ← INF˙ _lookup_ ⟨
- ˜, INF _lookup_ ⟨
- +, ÷⟜2⊘(-˜)
- -, IA∘0⊘+
- ×, √⊘(÷˜)
- ÷, IA∘0⊘×
- ⋆, IA∘0⊘√
- √, IA∘0⊘(÷Log)
- ∧, √⊘(÷˜)
- ∨, (¬√∘¬)⊘(-˜÷1-⊣)
- ¬, IA∘0⊘(+-1˙)
+ '˜', INF _lookup_ ⟨
+ '+', ÷⟜2⊘(-˜)
+ '-', IA∘0⊘+
+ '×', √⊘(÷˜)
+ '÷', IA∘0⊘×
+ '⋆', IA∘0⊘√
+ '√', IA∘0⊘(÷Log)
+ '∧', √⊘(÷˜)
+ '∨', (¬√∘¬)⊘(-˜÷1-⊣)
+ '¬', IA∘0⊘(+-1˙)
- ¨, {𝕏⁼¨ ⊣·IX 0<≡∘⊢}
- ⌜, {𝕏⁼⌜⊘(IA∘0) ⊣·IX 0<≡∘⊢}
- ˘, {(IX∘IsArray⊸⊢𝕏⁼)˘ ⊣·IX 0<=∘⊢}
- `, {(⊏∾¯1⊸↓𝕏1⊸↓)⍟(1<≠)⊘(»𝕏⊢)⊣·IX 0<=∘⊢}∘{𝕏⁼¨}
+ '¨', {𝕏⁼¨ ⊣·IX 0<≡∘⊢}
+ '⌜', {𝕏⁼⌜⊘(IA∘0) ⊣·IX 0<≡∘⊢}
+ '˘', {(IX∘IsArray⊸⊢𝕏⁼)˘ ⊣·IX 0<=∘⊢}
+ '`', {(⊏∾¯1⊸↓𝕏1⊸↓)⍟(1<≠)⊘(»𝕏⊢)⊣·IX 0<=∘⊢}∘{𝕏⁼¨}
⟩ {
0⊸⊑ {𝕏𝕨}⟜𝔽 1⊸⊑
}
IsConstant ← (3≤Type)◶⟨1 ⋄ 4‿˙ ≡ 0‿¯1⊏{Decompose𝕩}⟩
Mod2Inverse ← INF˙ _lookup_ ⟨
- _inv_, {𝕏_inv_𝕎}
- ∘, AtopInverse
- ○, {Fi←𝕎⁼⋄𝕏⁼ Fi⊘(𝕏⊸Fi)}
- ⌾, {𝕎⁼⌾𝕏} # Need to verify for computation Under
- ⍟, Int∘⊢◶⟨IA∘0˙,0⊸≤◶{𝕎⍟(-𝕩)_invChk_(𝕎⍟𝕩)}‿{𝕎⍟(-𝕩)}⟩
- ⊘, {(𝕎⁼)⊘(𝕏⁼)}
- ⊸, IsConstant∘⊣ ⊣◶{INF⊘𝕏}‿⊢ {𝕎⊸(𝕏⁼)}
- ⟜, {(𝕨IsConstant∘⊢◶⟨IA∘0˙,{𝕩𝕎˜⁼⊢}⟩𝕩)⊘(𝕏⁼𝕎⁼)}
-⟩ {
+ '∘', AtopInverse
+ '○', {Fi←𝕎⁼⋄𝕏⁼ Fi⊘(𝕏⊸Fi)}
+ '⌾', {𝕎⁼⌾𝕏} # Need to verify for computation Under
+ '⍟', Int∘⊢◶⟨IA∘0˙,0⊸≤◶{𝕎⍟(-𝕩)_invChk_(𝕎⍟𝕩)}‿{𝕎⍟(-𝕩)}⟩
+ '⊘', {(𝕎⁼)⊘(𝕏⁼)}
+ '⊸', IsConstant∘⊣ ⊣◶{INF⊘𝕏}‿⊢ {𝕎⊸(𝕏⁼)}
+ '⟜', {(𝕨IsConstant∘⊢◶⟨IA∘0˙,{𝕩𝕎˜⁼⊢}⟩𝕩)⊘(𝕏⁼𝕎⁼)}
+⟩ { inv˙⊸=◶⟨𝔽,{𝕏_inv_𝕎}˙⟩ } {
0‿2⊸⊏ {𝕏´𝕨}⟜𝔽 1⊸⊑
}
TrainInverse ← {
@@ -810,13 +812,13 @@ FuncInverse ← (⊑ ⊣◶⟨
Inverse ← Type◶(3‿1‿2/{⊢⊣𝕩IX∘≡⊢}‿FuncInverse‿("Cannot invert modifier"!0˙))
⁼ ↩ {𝕗 (≢∧INF˙⊸≢)◶0‿(5‿_inv_≢0‿¯2⊏Decompose∘⊢)◶⊢‿{𝕏_inv_(𝕎_invChk_𝕏)} Inverse 𝕗}
-structPrimClass ← {((/∾≠)≠¨𝕩)⊑˜·⊑(∾𝕩)⊐<} ⥊¨ ⟨
- ⊢‿⊣‿˜‿∘‿○‿⊸‿⟜‿⊘‿◶
- =‿≠‿≢
- <
- ≍
- ↕‿/‿»‿«‿⊔
- ⥊‿↑‿↓‿⌽‿⍉‿⊏‿⊑
+structPrimClass ← {(∾𝕩)_glyphLookup_((/≍○<≠)≠¨𝕩)} ⥊¨ ⟨
+ '⊢'‿'⊣'‿'˜'‿'∘'‿'○'‿'⊸'‿'⟜'‿'⊘'‿'◶'
+ '='‿'≠'‿'≢'
+ '<'
+ '≍'
+ '↕'‿'/'‿'»'‿'«'‿'⊔'
+ '⥊'‿'↑'‿'↓'‿'⌽'‿'⍉'‿'⊏'‿'⊑'
# >
# ∾
# ˘⎉¨⌜