blob: 32aad9d692ede2202a9b40c411c33f0bd71c1caf (
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
|
#!/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
Windowsβ{
Natβ(1=β’Type)βΆβ¨0,0βΈβ€β§ββΈ=β©
! 0=β’Type π©
! 1β₯=π¨
! π¨β€ββ β’π©
! β§Β΄NatΒ¨β₯π¨
sβ(β π¨)ββ’π©
! β§Β΄π¨β€1+s
π¨{(βΎβ(π¨β βΈββ’π©)ββ’β₯>)<Β¨βΈββπ©Β¨s(Β¬+ββββ’)β₯π¨}β(0<β π¨)π©
}
β β© β β Windows
#β
# LAYER 6: Everything else
# Searching
IndexOfβ(1<ββ=)βΆββΏ{
cβ1-Λ=π¨
! 0β€c
π¨ (0<β π¨)βΆβ¨0βcββ’,(+Λβ§`)β’βcβcβΏββ© π©
}
MarkFirstβ{
! 1β€=π©
uβ0βπ©
{(β u)>βu IndexOf π©}βΆ{uβ©uβΎπ©β1}βΏ0Λπ©
}
Findβ{
rβ=π¨
! rβ€=π©
π¨ β‘βr (β’π¨) ββr π©
}
β β β β IndexOf
β β MarkFirst β (βΛ<β ββ’)
β· β ββΈ/ β 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
(Raw (chrβΈββΎ<βnamesΛ)βΎ" β "βΎβ₯)Β¨ "ββ"
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
}
|