aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/r.bqn119
1 files changed, 60 insertions, 59 deletions
diff --git a/src/r.bqn b/src/r.bqn
index 1cdf15bc..0bfd5da4 100644
--- a/src/r.bqn
+++ b/src/r.bqn
@@ -55,17 +55,6 @@ _perv←{ # Pervasion
+○IsArray◶⟨𝔽⋄R⌜⊘(>○IsArray◶{𝕨{𝕗R𝕩}⌜𝕩}‿{𝕩{𝕩R𝕗}⌜𝕨})⋄R _eachd⟩
}
-⌜ ↩ {𝔽⌜○ToArray}
-¨ ↩ {(𝔽⌜)⊘(𝔽_eachd○ToArray)}
-
-match←{(0⊑𝕨)◶(1⊑𝕨)‿𝕩}´⟨
- ⟨=○IsArray, 0⟩
- ⟨IsArray∘⊢, =⟩
- ⟨=○= , 0⟩
- ⟨1×´=¨○≢ , 0⟩
- {1×´⥊𝕨Match¨𝕩}
-⟩
-
Cmp0 ← ≤˜-≤
Cmp1 ← (0<1×´≢∘⊢)◶⟨1, IsArray∘⊢◶(1-2×≤)‿{𝕨Cmp1𝕩}⟜(0⊑⥊)⟩
Cmp ← +○IsArray◶⟨
@@ -86,24 +75,24 @@ _grade←{
B←l⊸≤◶⊢‿l
(↕l){
i←-d←𝕨 ⋄ j←ei←ej←0
- e←3 ⋄ G←GT○(⊑⟜(m⊸ר⍟(1-m=1)𝕩)) ⋄ c←⟨G,0,1,2⟩
+ e←3 ⋄ G←GT○(⊑⟜(m⊸×⌜⍟(1-m=1)𝕩)) ⋄ c←⟨G,0,1,2⟩
s←(8≤d)⊑⟨+,{(𝕩-1){𝕩⋄e↩2⋄j↩i⋄i↩𝕩}⍟(1-G)⍟(1-e)𝕩}⟩
N←{i↩d+𝕨⋄ej↩B d+ei↩B j↩d+𝕩⋄e↩l≤j⋄S ei⋄i R j}
R←{𝕨e◶c𝕩}◶{e+↩2×ei=i↩1+𝕨⋄𝕨}‿{e+↩ej=j↩1+𝕩⋄𝕩}‿N
- {(i R j)⊑𝕩}⟜𝕩¨𝕩
- }´(2⋆ni-1+⊢)¨↕ni←-⌊-2 Log l+l=0
+ {(i R j)⊑𝕩}⟜𝕩⌜𝕩
+ }´(2⋆ni-1+⊢)⌜↕ni←-⌊-2 Log l+l=0
}
Indices←{
! 1==𝕩
l←≠𝕩
{
- ! 1×´Nat¨𝕩
+ ! 1×´Nat⌜𝕩
k←l-1
N ← ((⊢+-×0=𝕩⊑˜⊢)`k⊸-⌜↕l)⊑˜k-⊢ # Next nonzero
E ← ⊑⟜(+`𝕩)
ei←E i←N 0
- {{ei↩E i↩N𝕩+1⋄i}⍟(𝕩=ei)i}¨↕E k
+ {{ei↩E i↩N𝕩+1⋄i}⍟(𝕩=ei)i}⌜↕E k
}⍟(0<l)𝕩
}
@@ -113,9 +102,18 @@ _under_←{
g←Cmp0 _grade gi←⥊𝔾s⥊i
P←(≠g)⊸≤◶⟨(⊑⟜g)⊑gi˜,l⟩
e←P j←0
- s⥊{e=𝕩}◶⟨⊑⟜(⥊𝕩),{𝕩⋄r←(j⊑g)⊑v⋄e↩P j↩1+j⋄r}⟩¨i
+ s⥊{e=𝕩}◶⟨⊑⟜(⥊𝕩),{𝕩⋄r←(j⊑g)⊑v⋄e↩P j↩1+j⋄r}⟩⌜i
}
-⌾ ← _under_
+
+¨ ↩ {(𝔽⌜)⊘(𝔽_eachd)○ToArray}
+
+match←{(0⊑𝕨)◶(1⊑𝕨)‿𝕩}´⟨
+ ⟨=○IsArray, 0⟩
+ ⟨IsArray∘⊢, =⟩
+ ⟨=○= , 0⟩
+ ⟨1×´=¨○≢ , 0⟩
+ {1×´⥊𝕨Match¨𝕩}
+⟩
+ ↩ + _perv
- ↩ - _perv
@@ -139,14 +137,14 @@ identity ← (0⊑⟨!∘0⟩) {(0⊑𝕨){𝕗=𝕩}◶𝕩‿(1⊑𝕨)}´ ⟨
SelSub←{
! IsArray 𝕨
- ! 1×´⥊Int¨ 𝕨
+ ! 1×´⥊Int⌜ 𝕨
l←≠𝕩
- ! 1×´⥊ ((-l)⊸≤×l⊸>)¨ 𝕨
- ((⊢+l×0>⊢)¨𝕨)(1==𝕩)◶{
+ ! 1×´⥊ ((-l)⊸≤×l⊸>)⌜ 𝕨
+ ((⊢+l×0>⊢)⌜𝕨)(1==𝕩)◶{
c←1×´s←1 Cell 𝕩
𝕨((⥊𝕩)⊑˜c⊸×⊸+)⌜s⥊↕c
}‿{
- ⊑⟜𝕩¨𝕨
+ ⊑⟜𝕩⌜𝕨
}𝕩
}
@@ -155,34 +153,34 @@ Deshape←IsArray◶{⟨𝕩⟩}‿⥊
Reshape←{
! 1≥=𝕨
𝕨↩Deshape 𝕨
- ! ∧´Nat¨𝕨
+ ! ∧´Nat⌜𝕨
l←×´𝕨
n←×´≢𝕩
𝕨⥊{
- 𝕩(0<n)◶⟨Type⊸(⊣⌜)⋄⥊⊸{⊑⟜𝕨¨n|𝕩}⟩↕l
+ 𝕩(0<n)◶⟨Type⊸(⊣⌜)⋄⥊⊸{⊑⟜𝕨⌜n|𝕩}⟩↕l
}⍟(l≠n)𝕩
}⟜ToArray
⥊ ↩ Deshape ⊘ Reshape
Range←{
I←{!Nat𝕩⋄↕𝕩}
- M←{!1==𝕩⋄(<⟨⟩)⥊⊸∾⌜´I¨𝕩}
+ M←{!1==𝕩⋄(<⟨⟩)⥊⊸∾⌜´I⌜𝕩}
IsArray◶I‿M 𝕩
}
-Depth←IsArray◶0‿{1+0⌈´Depth¨⥊𝕩}
+Depth←IsArray◶0‿{1+0⌈´Depth⌜⥊𝕩}
≡ ← Depth ⊘ Match
≢ ↩ ≢ ⊘ (¬Match)
-DropV← {⊑⟜𝕩¨𝕨+↕𝕨-˜≠𝕩}
+DropV← {⊑⟜𝕩⌜𝕨+↕𝕨-˜≠𝕩}
Cell ← DropV⟜≢
Pair ← {⟨𝕩⟩} ⊘ {⟨𝕨,𝕩⟩}
Merge←{
c←≢0⊑⥊𝕩
- ! ∧´⥊(c≡≢)¨𝕩
+ ! ∧´(c≡≢)⌜⥊𝕩
𝕩⊑⟜⥊˜⌜c⥊↕×´c
}⍟(0<≠∘⥊)
> ↩ Merge ⊘ >
@@ -192,7 +190,7 @@ _depthOp_←{
neg←0>n←𝕨𝔾_ranks𝕩 ⋄ F←𝔽
_d←{
R←(𝕗+neg)_d
- 𝕨(×⟜2⊸+´2⥊(neg∧𝕗≥0)∨(0⌈𝕗)≥Pair○≡)◶(⟨R¨⋄R⟜𝕩¨∘⊣⋄(𝕨R⊢)¨∘⊢⋄F⟩)𝕩
+ 𝕨(×⟜2⊸+´2⥊(neg∧𝕗≥0)∨(0⌈𝕗)≥Pair○≡)◶(⟨R¨⋄R⟜𝕩⌜∘⊣⋄(𝕨R⊢)⌜∘⊢⋄F⟩)𝕩
}
𝕨 n _d 𝕩
}
@@ -200,11 +198,11 @@ _depthOp_←{
_rankOp_←{
k←𝕨(Pair○= (0≤⊢)◶⟨⌊⟜-,0⌈-⟩¨ 𝔾_ranks)𝕩
Enc←{
- f←⊑⟜(≢𝕩)¨↕𝕨
+ f←⊑⟜(≢𝕩)⌜↕𝕨
c←×´s←𝕨Cell𝕩
- f⥊⊑⟜(⥊𝕩)¨∘((s⥊↕c)+c×⊢)¨↕×´f
+ f⥊⊑⟜(⥊𝕩)⌜∘((s⥊↕c)+c×⊢)⌜↕×´f
}
- Enc↩(>⟜0+≥⟜=)◶⟨<⊢,Enc,<¨⊢⟩
+ Enc↩(>⟜0+≥⟜=)◶⟨<⊢,Enc,<⌜⊢⟩
> ((0⊑k)Enc𝕨) 𝔽¨ ((1-˜≠)⊸⊑k)Enc𝕩
}
⎉ ← _rankOp_
@@ -234,7 +232,7 @@ Select←ToArray⊸(SelSub _onAxes_ 1)
JoinTo←∨○(1≠=)◶∾‿{
s←𝕨Pair○≢𝕩
- a←1⌈´k←≠¨s
+ a←1⌈´k←≠⌜s
! ∧´1≥a-k
c←(k¬a)+⟜(↕a-1)⊸⊏¨s
! ≡´c
@@ -247,27 +245,27 @@ Take←{
! Int 𝕨
l←≠𝕩 ⋄ n←𝕨<0 ⋄ e←l⌊r←|𝕨 ⋄ s←⟨r⟩
i ← 𝕩{s∾↩c←1 Cell 𝕨⋄𝕩(×+⌜↕∘⊢)×´c}⍟(1≠=𝕩) (l-e)+⍟n ↕e
- s ⥊ 𝕩{(⥊𝕩)n◶⟨∾,∾˜⟩(r-e)⥊Type𝕗}⍟(l<r) ⊑⟜(⥊𝕩)¨i
+ s ⥊ 𝕩{(⥊𝕩)n◶⟨∾,∾˜⟩(r-e)⥊Type𝕗}⍟(l<r) ⊑⟜(⥊𝕩)⌜i
}
𝕨 T _onAxes_ 0 (⟨1⟩⥊˜0⌈𝕨-○≠⊢)⊸∾∘≢⊸⥊𝕩
}
-Prefixes ← {!1≤=𝕩 ⋄ (↕1+≠𝕩)Take¨<𝕩}
+Prefixes ← {!1≤=𝕩 ⋄ Take⟜𝕩⌜↕1+≠𝕩}
↑ ← Prefixes ⊘ Take
Drop←{
s←(≠𝕨)(⊣↑⊢∾˜1⥊˜0⌈-⟜≠)≢𝕩
((sׯ1⋆𝕨>0)+(-s)⌈s⌊𝕨)↑𝕩
}
-Suffixes ← {!1≤=𝕩 ⋄ (↕1+≠𝕩)Drop¨<𝕩}
+Suffixes ← {!1≤=𝕩 ⋄ Drop⟜𝕩⌜↕1+≠𝕩}
↓ ← Suffixes ⊘ Drop
Windows←{
! IsArray 𝕩
! 1≥=𝕨
! 𝕨≤○≠≢𝕩
- ! ∧´Nat¨⥊𝕨
+ ! ∧´Nat⌜⥊𝕨
s←(≠𝕨)↑≢𝕩
! ∧´𝕨≤1+s
- 𝕨{(∾⟜(𝕨≠⊸↓≢𝕩)∘≢⥊>)<¨⊸⊏⟜𝕩¨s(¬+⌜○Range⊢)⥊𝕨}⍟(0<≠𝕨)𝕩
+ 𝕨{(∾⟜(𝕨≠⊸↓≢𝕩)∘≢⥊>)<⌜⊸⊏⟜𝕩¨s(¬+⌜○Range⊢)⥊𝕨}⍟(0<≠𝕨)𝕩
}
Reverse ← {!1≤=𝕩 ⋄ (-↕⊸¬≠𝕩)⊏𝕩}
@@ -281,31 +279,31 @@ Replicate ← {0<=𝕨}◶(⥊˜⟜≠Rep⊢)‿{!𝕨=○≠𝕩⋄𝕨Rep𝕩}
/ ← Indices ⊘ Replicate
-Join←(1≠=)◶⟨∨´1≠=¨,1⟩◶{
+Join←(1≠=)◶⟨∨´1≠=⌜,1⟩◶{
# List of lists
i←j←¯1⋄e←⟨⟩⋄a←𝕩
- {{e↩a⊑˜i↩𝕩⋄j↩¯1}⍟(i⊸≠)𝕩⋄(j↩j+1)⊑e}¨/≠¨𝕩
+ {{e↩a⊑˜i↩𝕩⋄j↩¯1}⍟(i⊸≠)𝕩⋄(j↩j+1)⊑e}⌜/≠⌜𝕩
}‿{
# Multidimensional
C←(<⟨⟩)⥊⊸∾⌜´⊢ # Cartesian array product
! IsArray 𝕩
- s←≢¨𝕩
+ s←≢⌜𝕩
d←≠0⊑⥊s
- ! ∧´⥊d=≠¨s
+ ! ∧´⥊d=≠⌜s
! d≥=𝕩
- l←(≢𝕩){(𝕩⊑⟜≢a Pick1˜(j=𝕩)⊸×)¨↕𝕨}¨j←↕r←=a←𝕩
- ! (r↑¨s)≡C l
- i←C{p←+´¨↑𝕩⋄(↕0⊑⌽p)-𝕩/¯1↓p}¨l
- >i<¨⊸⊏¨l/𝕩
+ l←(≢𝕩){(𝕩⊑⟜≢a Pick1˜(j=𝕩)⊸×)⌜↕𝕨}¨j←↕r←=a←𝕩
+ ! (r⊸↑⌜s)≡C l
+ i←C{p←+´⌜↑𝕩⋄(↕0⊑⌽p)-𝕩/¯1↓p}⌜l
+ >i<⌜⊸⊏¨l/𝕩
}⍟(0<≠∘⥊)
Group←{
! IsArray 𝕩
- Chk←{!1==𝕩⋄!∧´Int¨𝕩⋄!∧´¯1≤𝕩⋄≠𝕩}
- l←(1<≡)◶Chk‿{!1==𝕩⋄Chk¨𝕩}𝕨
+ Chk←{!1==𝕩⋄!∧´Int⌜𝕩⋄!∧´¯1≤𝕩⋄≠𝕩}
+ l←(1<≡)◶Chk‿{!1==𝕩⋄Chk⌜𝕩}𝕨
! l≤○≠≢𝕩
! ∧´l=l≠⊸↑≢𝕩
- (𝕨⊸=/𝕩˜)¨↕1+¯1⌈´⚇1𝕨
+ (𝕨⊸=/𝕩˜)⌜↕1+¯1⌈´⚇1𝕨
}
∾ ↩ Join ⊘ JoinTo
@@ -314,19 +312,19 @@ Group←{
Pick1←{
! 1==𝕨
! 𝕨=○≠s←≢𝕩
- ! ∧´Int¨𝕨
+ ! ∧´Int⌜𝕨
! ∧´𝕨(≥⟜-∧<)s
𝕨↩𝕨+s×𝕨<0
(⥊𝕩)⊑˜0(⊑⟜𝕨+⊑⟜s×⊢)´-↕⊸¬≠𝕨
}
-Pickd←(∨´∘⥊IsArray¨∘⊣)◶Pick1‿{Pickd⟜𝕩¨𝕨}
+Pickd←(∨´IsArray⌜∘⥊∘⊣)◶Pick1‿{Pickd⟜𝕩⌜𝕨}
Pick←IsArray◶⥊‿⊢⊸Pickd
# Searching
IndexOf←{
c←1-˜=𝕨
! 0≤c
- 𝕨 (0<≠𝕨)◶⟨0⎉c∘⊢,(+˝∧`)≢⌜○((0<c)◶⟨⊢,<⎉c⟩)⟩ 𝕩
+ 𝕨 (0<≠𝕨)◶⟨0⎉c∘⊢,(+˝∧`)≢⌜○((0<c)◶⟨⊢,<⎉c⟩)⟩ ToArray𝕩
}
UniqueMask←{
! 1≤=𝕩
@@ -348,11 +346,11 @@ ReorderAxes←{
! 1≥=𝕨
𝕨↩⥊𝕨
! 𝕨≤○≠≢𝕩
- ! ∧´Nat¨⥊𝕨
+ ! ∧´Nat⌜⥊𝕨
r←(=𝕩)-+´¬∊𝕨
! ∧´𝕨<r
𝕨↩𝕨∾𝕨(¬∘∊˜/⊢)↕r
- (𝕨⊸⊏Pick𝕩˜)¨↕⌊´¨𝕨⊔≢𝕩
+ (𝕨⊸⊏Pick𝕩˜)⌜↕⌊´⌜𝕨⊔≢𝕩
}
Transpose←(=-1˜)⊸ReorderAxes⍟(0<=)
⍉ ← Transpose ⊘ ReorderAxes
@@ -365,10 +363,10 @@ CmpLen ← {
r←𝕨⌊○≠𝕩
l←𝕨{
i←+´∧`𝕨=𝕩
- m←×´⊑⟜𝕨¨↕i
+ m←×´⊑⟜𝕨⌜↕i
{c↩×-´𝕩⋄m↩m×⌊´𝕩}∘(⊑¨⟜𝕨‿𝕩)⍟(r⊸>)i
m
- }○(((-1+↕r)+≠)⊸{⊑⟜𝕩¨𝕨})𝕩
+ }○(((-1+↕r)+≠)⊸{⊑⟜𝕩⌜𝕨})𝕩
⟨l,c⟩
}𝕩
}
@@ -395,12 +393,12 @@ _bins←{
! c≤=𝕩
lw←×´sw←1 Cell 𝕨
cw←lw 𝔽○(⊑⟜(⥊𝕨)) _getCellCmp 0
- ! 0⊸<◶⟨1,∧´0≤˜·cw¨⟜(lw⊸+)lw×↕∘-⟜1⟩≠𝕨
+ ! 0⊸<◶⟨1,∧´0≤˜·cw⟜(lw⊸+)⌜lw×↕∘-⟜1⟩≠𝕨
cx←c-˜=𝕩
sx←cx Cell 𝕩 ⋄ lc←sw CmpLen sx
cc ← (⊑⟜(⥊𝕨))⊸𝔽⟜(⊑⟜(⥊𝕩)) _getCellCmp´ lc
B←(×´sw)⊸×⊸Cc≤0˜
- (≠𝕨) {B⟜𝕩 _binSearch 𝕨}¨ (×´sx) × ⥊⟜(↕×´)⊑⟜(≢𝕩)¨↕cx
+ (≠𝕨)⊸{B⟜𝕩 _binSearch 𝕨}⌜ (×´sx) × ⥊⟜(↕×´)⊑⟜(≢𝕩)⌜↕cx
}
⍋ ← Cmp _grade ⊘ ( Cmp _bins)
@@ -425,7 +423,7 @@ inverse ← {(⊑(0⊏𝕩)⊐<) ⊑ ((1⊏𝕩)∾⟨!∘0⟩)˜} ⍉ (2∾˜2
∧, ⊢⊘(÷˜)
∨, ⊢⊘(-˜÷1-⊢)
<, {!IsArray𝕩⋄!0==𝕩⋄⊑𝕩}⊘(!∘0)
- /, {!(⍋≡↕∘≠)𝕩⋄≠¨⊔𝕩}⊘(!∘0)
+ /, {!(⍋≡↕∘≠)𝕩⋄≠⌜⊔𝕩}⊘(!∘0)
⁼ ← {Inverse 𝕗}
@@ -439,3 +437,6 @@ _repeat_←{
(|⊑<⟜0⊑pos‿neg˜)⚇0 n
}
⍟ ↩ _repeat_
+
+⌜ ↩ {𝔽⌜○ToArray}
+⌾ ← _under_