blob: 9194afa9b8388f8450c0db611b4fa2c8e8d3a3a8 (
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
#!/usr/bin/env dbqn
impl β "
Λ β {π©βπ}
#β
# LAYER 4: Operators
_ranks β {β¨2β©ββ¨1,0β©((β£-1+|)Λββ βΒ¨<ββ’)β₯βπ½}
_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β©
_onAxes_β{
Fβπ½
(πΎ<β‘)ββ£βΆ{ # One axis
! 1β€=π©
π¨Fπ©
}βΏ{ # Multiple axes
! 1β₯=π¨
! π¨β€ββ β’π©
Rβ{(βπ¨)F(1βπ¨)βΈRΛπ©}β{0<β π¨}
π¨Rπ©
}
}
Windowsβ{
! IsArray π©
! 1β₯=π¨
! π¨β€ββ β’π©
! β§Β΄NatΒ¨β₯π¨
sβ(β π¨)ββ’π©
! β§Β΄π¨β€1+s
π¨{(βΎβ(π¨β βΈββ’π©)ββ’β₯>)<Β¨βΈββπ©Β¨s(Β¬+ββββ’)β₯π¨}β(0<β π¨)π©
}
Rotate β β½ _onAxes_ 0
β β© β β Windows
β½ β© β½ β Rotate
#β
# LAYER 6: Everything else
Joinβ{
Cβ(<β¨β©)β₯βΈβΎβΒ΄β’ # Cartesian array product
! IsArray π©
sββ’Β¨π©
dββ βs
! β§Β΄β₯d=β Β¨s
! dβ₯=π©
lβ(β’π©){(π©βββ’aβΛ(j=π©)βΈΓ)Β¨βπ¨}Β¨jββrβ=aβπ©
! (rβΒ¨s)β‘C l
iβC{pβ+´¨βπ©β(βββ½p)-π©/Β―1βp}Β¨l
>i<Β¨βΈβΒ¨l/π©
}β(0<β ββ₯)
βΎ β© Join β βΎ
# 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 π©
}
β β !β0 β IndexOf
β β UniqueMask β (βΛ<β ββ’)
β· β ββΈ/ β Find
OccurrenceCount β βΛ(β’-β)βββ
ProgressiveIndexOf β {π¨ββ(βΛβOccurrenceCountπ¨βΈβ)π©}
β β OccurrenceCountβ ProgressiveIndexOf
"
XβRawβ{F:β€4}
{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βΎΒ¨(β’UCS 48)βΎΒ¨post
Inc β {
iββchrβπ©
nβ0 β itrβ©{nβ©1+π©}βΎ(iββ’)itr
namesβ©((iβinit)βΎ(β’UCS 48+n)βΎiβpost)βΎ(iββ’)names
}
# built-in assumptions
Mod β {((βchrβπ¨)βnames) βΎ " β " βΎ π©}
βΒ¨ β¨
"IsArray β 0β β‘"
'!' Mod "{π© β β€1}βΒ¬"
β©βΎModββ₯Β¨ "ββΎβ½β"
# 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βΒ¬β¨`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 β β’UCS 10
pre β E_isdefβΆE_procβΏE_redefΒ¨ lf((β’-ΛΒ¬Γ+`)β=ββ’)impl
Rawβ©β
ExecFileβ{Raw βΎ βΎβlfΒ¨ E_procΒ¨ β’LNS π©}
Xβ©RawβE_proc
β βΎ βΎβlfΒ¨ pre
β βΆXβΏ{ExecFile βπ©}βΏ{ExecFile βπ© β X 1βπ©} β’args
}
|