aboutsummaryrefslogtreecommitdiff
path: root/dzref
blob: 7598775d2c7b8a899361ec15766472a3f973a702 (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
#!/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

Group←(1=β‰‘βˆ˜βŠ£)β—ΆβŠ”β€Ώ((1==∘⊣)β—ΆβŸ¨
  β₯Šβˆ˜βŠ£βŠ”βˆΎΛβˆ˜βŠ’⍟(=∘⊣)
  >β—‹β‰ β—ΆβŠ”β€Ώ{(Β―1βŠ‘π•¨)β₯ŠβŸœ(<0↑𝕩)⊸(»˜)⍟(>βŸœβ‰ )(Β―1↓𝕨)βŠ”π•©}
⟩)
βŠ” ↩ βŠ”βŠ˜Group


#⌜
# 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 ((1+r-βŠΈβ†‘β‰’π•©)βŒŠβ‰’π•¨)βŠΈβ†•βŽ‰r 𝕩
}

⊐ ← ⊐              ⊘ IndexOf
∊ ← MarkFirst      ⊘ (⊐˜<β‰ βˆ˜βŠ’)
⍷ ← ∊⊸/            ⊘ Find

OccurrenceCount ← ⊐˜(⊒-⊏)β‹βˆ˜β‹
ProgressiveIndexOf ← {π•¨βŠβ—‹(β‰Λ˜βŸœOccurrenceCountπ•¨βŠΈβŠ)𝕩}

βŠ’ ← OccurrenceCount⊘ ProgressiveIndexOf
"

raw ← {β€’Eval}
X ← {F:≀4}
_withRef ← Λ™
{v:
  chrsβ†βŸ¨
    "β†•βŠβŠ’βˆŠβ·βŠ”"
    ""
    "βš‡"
  ⟩

  # built-in assumptions
  GetRepls ← {
    cβ€Ώn ← 𝕩 β‹„ k←"β†•βŠβŠ”"
    ⟨c,(β₯ŠΒ¨k)⌾(((βŠ‘Β¨c)⊐k)⊸⊏)n⟩ ∾⟜<Β¨ ⟨"β€’Eval","(β€’Eval _withRef)"⟩
  }

  ⟨E_proc,E_nodef⟩ ← chrsβ€ΏGetRepls β€’Import "src/pp.bqn"

  lf ← @+10
  pre ← E_procΒ¨ lf((⊒-ΛœΒ¬Γ—+`)∘=βŠ”βŠ’)impl
  ExecFile←{
    src ← E_nodefΒ¨ β€’FLines 𝕩
    ⟨⟨⟩,"",(∨`⌾⌽'/'=𝕩)/π•©βŸ© Raw ∾ ∾⟜lfΒ¨ src
  }
  _withRef ↩ {π”½βˆ˜E_nodef⊘(π”½βŸœE_nodef)}
  X↩Raw _withRef
  Raw ∾ ∾⟜lf¨ pre
  β‰ β—Ά(XΛ™)β€Ώ{ExecFile βŠ‘π•©}β€Ώ{ExecFile βŠ‘π•© β‹„ X 1βŠ‘π•©} β€’args
}