aboutsummaryrefslogtreecommitdiff
path: root/compiler/standard.ey
blob: 136e7b03731d7e9f9b531000dc80bebe07123c76 (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
|defv "==?" deffd
|deff "=*?" deffd
|defvst "==" deffd
|deffst "=*" deffd
|defvc "==:" deffd
|deffc "=*:" deffd

"}" | {
  { =*f ==x
    { x f }
  } quoted { } { * } ? *
} ; "}_" defq

{ { -01 < ==o { o -01 }' "." | ; > -12 } } {
  quoted { }" { * }" ? *
  quoted { |deffst } { deffst }" ? *
}" ; /via defq

{ -1110 ; ==f =*a len _
    {
      0 a
      1 -102 range f each
    }' { "fold on empty array" die }'
  ? *
} /fold deffd

{ _ =*a len
  [ 1 -1202 1 add range { -110 sub a -01 }' each -- ] # TODO: rethink this one, seems overly complicated
} /reverse deffd

{ _ len { |or  fold }' { -- 0 }' ? * }' /any deffd
{ _ len { |and fold }' { -- 1 }' ? * }' /all deffd

{ =*?p {
  [ -01 { _ p { } { -- } ? * } each ]
} } /engrep deffd

{ engrep * } /grep deffd
{ -110 ; engrep |dom -20*1* } /indices deffd

{ =*p _ =*a len ==l
  1 neg ==r

  0 {
    _ l lt 1 neg r eq and
  } {
    _ a p { _ =r } { } ? *
      1 add
  } loop --
  r
} /index deffd

{
  not { "Assertion failure" die } rep
} /assert deffd

{ ==s
  [ s keys { s -01 . }' each ]
} /values deffd

{ _ =*conds len ==max
  0 ==i { i max lt }" {
    i conds * { i 1 add conds * max =i }" { }" ? *
    i 2 add =i
  }" loop
} /conds deffd

{ -1010 gt -021 ? }' /max deffd
{ -1010 lt -021 ? }' /min deffd

# vim: syn=elymas