blob: 28bba9d5b369d1f137d1d6098772368c25c1db91 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#!/usr/bin/env dbqn
impl β "
#β
# LAYER 4: Operators
ValidateRanksβ{
! 1β₯=π©
π©β©β₯π©
! (1βΈβ€β§β€β3)β π©
! β§Β΄ββΈ=βπ©
π©
}
_ranks β {β¨2β©ββ¨1,0β© ((β£-1+|)Λββ βΒ¨<ββ’) ValidateRanksβπ½}
_depthOp_β{
negβ0>nβπ¨πΎ_ranksπ© β Fβπ½
_dβ{
Rβ(π+neg)_d
π¨(2β₯(negβ§πβ₯0)β¨(0βπ)β₯ββ<ββ‘)βΆ(β¨RΒ¨βRβπ©Β¨ββ£β©ββ¨(π¨Rβ’)Β¨ββ’βFβ©)π©
}
π¨ n _d π©
}
β β _depthOp_
#β
# LAYER 5: Structural functions
NatβIsArrayβΆβ¨0βΈβ€β§ββΈ=,0β©
Windowsβ{
! IsArray π©
! 1β₯=π¨
! π¨β€ββ β’π©
! β§Β΄NatΒ¨β₯π¨
sβ(β π¨)ββ’π©
! β§Β΄π¨β€1+s
π¨{(βΎβ(π¨β βΈββ’π©)ββ’β₯>)<Β¨βΈββπ©Β¨s(Β¬+ββββ’)β₯π¨}β(0<β π¨)π©
}
β β© β β Windows
#β
# LAYER 6: Everything else
# Searching
IndexOfβ(1<ββ=)βΆββΏ{
cβ1-Λ=π¨
! 0β€c
π¨ (0<β π¨)βΆβ¨0βcββ’,(+Λβ§`)β’βcβcβΏββ© π©
}
UniqueMaskβ{
! 1β€=π©
uβ0βπ©
{(β u)>βu IndexOf π©}βΆ{uβ©uβΎπ©β1}βΏ0Λπ©
}
Findβ{
rβ=π¨
! rβ€=π©
π¨ β‘βr (β’π¨) ββr π©
}
β β β β IndexOf
β β UniqueMask β (βΛ<β ββ’)
β· β ββΈ/ β Find
OccurrenceCount β βΛ(β’-β)βββ
ProgressiveIndexOf β {π¨ββ(βΛβOccurrenceCountπ¨βΈβ)π©}
β β OccurrenceCountβ ProgressiveIndexOf
"
raw β {β}
X β {F:β€4}
_withRef β Λ
{v:
chrsββ¨
"βββββ·"
""
"β"
β©
nc β β Β¨chrs
chr β βΎchrs
itr β 0β₯Λβ chr
init β " "βΈβΎΒ¨(/β"_"Β¨nc/0βΏ1βΏ1)βΎΒ¨(nc/"FMD")βΎΒ¨(nc+Β΄βΈββ₯"AB"βΎββ’a)
post β βΎβ" "Β¨/β"_"Β¨nc/0βΏ0βΏ1
names β initβΎΒ¨'0'βΎΒ¨post
Inc β {
iββchrβπ©
nβ0 β itrβ©{nβ©1+π©}βΎ(iββ’)itr
namesβ©((iβinit)βΎ('0'+n)βΎiβpost)βΎ(iββ’)names
}
# built-in assumptions
Mod β {((βchrβπ¨)βnames) βΎ " β " βΎ π©}
RawΒ¨ β¨
"IsArray β 0β β‘"
β©βΎModββ₯Β¨ "ββ"
chrβΎβ©"β" β namesβΎβ©β¨"β_withRef "β©
# checks if line is a builtin redefinition
E_isdef β (3β€β )βΆβ¨0,β§Β΄β¨chr," ","ββ©"β©βΛΒ¨3βΈββ©
# removes comments and replaces built-ins with names
E_proc β {
lββ chr
qββ `π©β"""'" β fβ(π©=lf)β₯β(βββ βΈ(β`Γ))q<π©='#'
βΎ (((lΓf/q)+chrβΈβ) (β₯βl)βΆβ¨ββnames,β₯ββ’β©Β¨ β’) f/π©
}
E_redef β { # handles [fmd] [ββ©]
tail β E_proc 3βπ© # must use old def
Inc βπ©
(E_proc 1βπ©) βΎ "β" βΎ tail
}
lf β @+10
pre β E_isdefβΆE_procβΏE_redefΒ¨ lf((β’-ΛΒ¬Γ+`)β=ββ’)impl
ExecFileβ{
src β E_procΒ¨ β’FLines π©
β¨β¨β©,"",(β¨`βΎβ½'/'=π©)/π©β© Raw βΎ βΎβlfΒ¨ src
}
_withRef β© {π½βE_procβ(π½βE_proc)}
Xβ©Raw _withRef
Raw βΎ βΎβlfΒ¨ pre
β βΆ(XΛ)βΏ{ExecFile βπ©}βΏ{ExecFile βπ© β X 1βπ©} β’args
}
|