aboutsummaryrefslogtreecommitdiff
path: root/compiler/standard.ey
blob: 71d461695bb29e4958b271eee7bbc1b7f451f602 (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
|defv "==" deff
|deff "=*" deff

{ "}" | *
  { /f deff /x defv
    { x f }
  } quoted { } { * } ? *
} "}_" defq

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

{ _ =*a len
  [ 1 -1202 range { -110 sub a -01 }' each -- ]
} /reverse deff

{ |or fold } /any deff
{ |and fold } /all deff

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

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

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

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

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

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

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

# vim: syn=elymas