From 4a097e594cf4eb918d7756bf6d438ed5492f4c9b Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Mon, 30 Aug 2021 20:25:32 -0400 Subject: Use new monadic ! in runtime and compiler --- src/c.bqn | 20 ++++++++++---------- src/r1.bqn | 12 ++++++------ 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index 77448b28..d5995fab 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -26,7 +26,7 @@ Pl←∾⟜("s"/˜1<≠) # Pluralize _tmpl←{∾𝕗{𝕎𝕩}¨<𝕩} # Template # Convert characters to numbers, mostly the same as tokens CharCode←charSet{ - ErrUnknownChars←0!˜⟨"Unknown character"⊸Pl,": ",⊢⟩_tmpl + ErrUnknownChars←!⟨"Unknown character"⊸Pl,": ",⊢⟩_tmpl Chk ← ⊢⊣ErrUnknownChars∘(≠/⊣)⍟≢⟜(⊏⟜𝕗) g←⍋𝕗 ⋄ ⊢ Chk g⊏˜1-˜1⌈(g⊏𝕗)⍋⊢ } @@ -46,7 +46,7 @@ Tokenize←{System‿vars←𝕨 Se←{(⊏˜𝕨)Se 1¨⌾((𝕩/𝕨)⊸⊏)𝕩}⍟(0=¯1⊑⊢) # Mark reachable openings St←(≠𝕩)↑·/⁼((≠↑∾⟜≠Se 1∾0¨)q⍋e)⊸/ # All indices → reached mask a←St q⋄b←St e⋄f←1≠`ab←a∨b # Open/close masks; filter - {⟨⊑/𝕩,"Unclosed quote"⟩!0}⍟(∨´)(sm∨dm)∧b«t M bD⋄rr←t=bR # Namespace dot; 𝕣 w←»⊸us + {!⟨/us∧w+`⊸⊏0∾𝕩,"Words can't only have underscores"⟩}⍟(∨´)w(/<1(⊢/«)(∨/⊣))l>us wk←(¬w/rr)×na⌊∘÷˜(⊑bA)-˜w/t # Kind of word from first char t-↩na×l∧t≥na+⊑bA # Case-insensitive - {⟨𝕩/is,"System dot with no name"⟩!0}⍟(∨´)sy>«l + {!⟨𝕩/is,"System dot with no name"⟩}⍟(∨´)sy>«l w≠↩»⊸∨sy # Start system word at dot wi←0n←l∧(+`w)⊏0∾¬wi # Identifier/Number masks @@ -73,8 +73,8 @@ Tokenize←{System‿vars←𝕨 if←(»⌈`)⊸us)×+`w>n # Identifier groups and first character fr←(1=wi/wt)us)∧(rr⊸≠∨if⊸<)ig⊏0∾fr - {⟨is⊏˜𝕩/𝕨,"Numbers can't start with underscores"⟩!0}⍟(∨´⊢)⟜(ws<(⊑bA)>⊏⟜t)/rrus)∧(rr⊸≠∨if⊸<)ig⊏0∾fr + {!⟨is⊏˜𝕩/𝕨,"Numbers can't start with underscores"⟩}⍟(∨´⊢)⟜(ws<(⊑bA)>⊏⟜t)/rr○≠◶⟨"opening"_mis_ 0, "closing"_mis_ 1˜⟩ - 0 !˜ 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩 + ! 𝕨 (Lcs<⌊○≠)◶⟨Msg,"Malformed bracket nesting"⟩ 𝕩 } - _err_←{(0!˜(∧∘⍉(i≍e˙)⊏⎉1˜/⟜𝔾)≍○<𝔽)⍟(∨´⍟=)} + _err_←{(!(∧∘⍉(i≍e˙)⊏⎉1˜/⟜𝔾)≍○<𝔽)⍟(∨´⍟=)} # Bracket and ligature validation and handling # Open brackets have role ¯1 and closed ones have role 0 @@ -315,7 +315,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn } Compile←{ - defaults←⟨⟩‿(("System values not supported"!0˙)¨)‿⟨⟩‿(↕0) + defaults←⟨⟩‿(!∘"System values not supported"¨)‿⟨⟩‿(↕0) prims‿Sys‿vars‿redef ← ∾⟜(≠↓defaults˙) ≍○<⍟(4<≠)𝕨 ⟨tok,role,val,t0,t1⟩←tx←sys‿vars Tokenize 𝕩 ⟨oc,prim,blk,bdy,oi⟩←⟨role,⊑val,t0,t1,redef»0¨vars⟩ Parse tok diff --git a/src/r1.bqn b/src/r1.bqn index d9a9c243..330b47f0 100644 --- a/src/r1.bqn +++ b/src/r1.bqn @@ -31,7 +31,7 @@ Split2 ← { s←2⊸×⌜↕(≠𝕩)÷2 ⋄ ⟨s⊏𝕩,(1⊸+⌜s)⊏𝕩⟩ _lookup_ ← { k‿v←Split2 𝕘 ⋄ k _glyphLookup_ (v∾⟨𝕗⟩) } -Identity ← {𝕏0} ("´: Identity not found"!0˙) _lookup_ ⟨ +Identity ← {𝕏0} !∘"´: Identity not found" _lookup_ ⟨ '+',0 , '-',0 '×',1 , '÷',1 '⋆',1 , '¬',1 @@ -285,7 +285,7 @@ Select ← ⟨"⊏" {(≠𝕩)⊸NormIndS⌜𝕨} ⊏ ⊢ {𝕩⊸NormIndS⌜𝕨} ⟩_multiAxis○ToArray -First ← IsArray◶⟨⊢, (0<≠)◶⟨"⊑𝕩: 𝕩 can't be empty"!0˙,0⊸⊑⟩⥊⟩ +First ← IsArray◶⟨⊢, (0<≠)◶⟨!∘"⊑𝕩: 𝕩 can't be empty",0⊸⊑⟩⥊⟩ Reverse←{ "⌽𝕩: 𝕩 must have rank at least 1" ! 1≤=𝕩 @@ -711,8 +711,8 @@ _repeat_←{ > ↩ Merge ⊘ ((1-≤) _perv) ≠ ↩ ≠ ⊘ ((1-=) _perv) = ↩ = ⊘ (= _perv) -≥ ← ("≥: Needs two arguments"!0˙) ⊘ (≥ _perv) -≤ ↩ ("≤: Needs two arguments"!0˙) ⊘ (≤ _perv) +≥ ← !∘"≥: Needs two arguments" ⊘ (≥ _perv) +≤ ↩ !∘"≤: Needs two arguments" ⊘ (≤ _perv) + ↩ + _perv - ↩ - _perv ¬ ← 1+- @@ -785,13 +785,13 @@ TrainInverse ← { } FuncInverse ← (0⊸⊑ ⊣◶⟨ {PrimInverse𝕩} 1⊸⊑ # 0 primitive - ("Cannot currently invert blocks"!0˙)˙ # 1 block + (!∘"Cannot currently invert blocks")˙ # 1 block 1⊸⊑ AtopInverse 2⊸⊑ # 2-train TrainInverse # 3-train 1⊸⊑ {𝕏𝕨}⟜{Mod1Inverse𝕩} 2⊸⊑ # 4 1-modifier 1‿3⊸⊏ {𝕏´𝕨}⟜{Mod2Inverse𝕩} 2⊸⊑ # 5 2-modifier ⟩ ⊢) {Decompose𝕩} -Inverse ← Type◶(3‿1‿2/{⊢⊣𝕩IX∘≡⊢}‿FuncInverse‿("Cannot invert modifier"!0˙)) +Inverse ← Type◶(3‿1‿2/{⊢⊣𝕩IX∘≡⊢}‿FuncInverse‿(!∘"Cannot invert modifier")) ∾ ↩ Join ⊘ JoinTo IA ← "⁼: Inverse failed"⊸! -- cgit v1.2.3