-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.elv
124 lines (91 loc) · 1.41 KB
/
utils.elv
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
fn optional_in [rest]{
arr = []
if (not (eq (count $rest) 1)) {
arr = (all)
} else {
arr = $rest[0]
}
put $arr
}
fn to_list [@rest]{
arr = []
if (not (eq (count $rest) 1)) {
@arr = (all)
} else {
arr = $rest[0]
}
put $arr
}
fn null_out [f]{
{ $f 2>&- > /dev/null }
}
fn has_failed [p]{
eq (bool ?(null_out $p)) $false
}
fn json [file]{
cat $file | from-json
}
fn filter [f @rest]{
a = (optional_in $rest)
@res = (for x $a {
if ($f $x) {
put $x
}
})
put $res
}
fn map [f @rest]{
a = (optional_in $rest)
@res = (for x $a {
put ($f $x)
})
put $res
}
#fn reduce [f arr acc]{
# for x $arr {
# acc = ($f $acc $x)
# }
# put $acc
#}
fn floor [x]{
@r = (splits . $x)
put $r[0]
}
fn zipMap [f @rest]{
arr = (optional_in $rest)
res = (map [x]{
@in = ($f $x)
put [$x $@in]
} $arr)
put $res
}
fn _table_tab_size [arr]{
if (eq (count $arr) 0) {
put []
return
}
@max = (repeat (count $arr[0]) 0)
each [line]{
i = 0
each [item]{
size = (count $item)
if (> $size $max[$i]) {
max[$i] = $size
}
i = (+ $i 1)
} $line
} $arr
put $max
}
fn table_print [@rest]{
arr = (optional_in $rest)
tab_size = (_table_tab_size $arr)
each [line]{
i = 0
each [item]{
printf "%-"$tab_size[$i]"s " $item
i = (+ $i 1)
} $line
printf "\n"
} $arr
}