2019-01-08 20:32:16 -06:00
|
|
|
let str_join = module{
|
|
|
|
sep=" ",
|
|
|
|
list=NULL,
|
|
|
|
} => {
|
2019-01-24 20:04:40 -06:00
|
|
|
let joiner = func (acc, item) => select (acc.out == ""), NULL, {
|
2019-01-16 19:07:03 -06:00
|
|
|
true = acc{
|
|
|
|
out="@@" % (acc.out,item),
|
|
|
|
},
|
|
|
|
false = acc{
|
|
|
|
out="@@@" % (acc.out, acc.sep, item),
|
2019-01-08 20:32:16 -06:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2019-01-31 16:33:12 -06:00
|
|
|
let result = reduce(joiner, {sep=mod.sep, out=""}, (mod.list)).out;
|
2019-01-08 20:32:16 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
let len = module{
|
|
|
|
list = NULL,
|
|
|
|
} => {
|
2019-01-24 20:04:40 -06:00
|
|
|
let counter = func (acc, item) => acc + 1;
|
2019-01-08 20:32:16 -06:00
|
|
|
|
2019-01-31 16:33:12 -06:00
|
|
|
let result = reduce(counter, 0, (mod.list));
|
2019-01-08 20:32:16 -06:00
|
|
|
};
|
|
|
|
|
2019-01-09 22:33:03 -06:00
|
|
|
let reverse = module{
|
|
|
|
list = NULL,
|
|
|
|
} => {
|
2019-01-24 20:04:40 -06:00
|
|
|
let reducer = func (acc, item) => [item] + acc;
|
2019-01-09 22:33:03 -06:00
|
|
|
|
2019-01-31 16:33:12 -06:00
|
|
|
let result = reduce(reducer, [], (mod.list));
|
2019-01-09 22:33:03 -06:00
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
let enumerate = module{
|
|
|
|
start = 0,
|
|
|
|
step = 1,
|
|
|
|
list = NULL,
|
|
|
|
} => {
|
2019-01-24 20:04:40 -06:00
|
|
|
let reducer = func (acc, item) => acc{
|
2019-01-16 19:07:03 -06:00
|
|
|
count = acc.count + acc.step,
|
|
|
|
list=acc.list + [[acc.count, item]],
|
2019-01-08 20:32:16 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
let acc = {count=mod.start, list=[], step=mod.step};
|
|
|
|
|
2019-01-31 16:33:12 -06:00
|
|
|
let enumerated = reduce(reducer, acc, (mod.list));
|
2019-01-08 20:32:16 -06:00
|
|
|
let result = enumerated.list;
|
2019-01-10 18:38:14 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
let zip = module{
|
|
|
|
list1 = NULL,
|
|
|
|
list2 = NULL,
|
|
|
|
} => {
|
2019-01-24 20:04:40 -06:00
|
|
|
let counter = func (acc, item) => acc + 1;
|
2019-01-10 18:38:14 -06:00
|
|
|
|
2019-01-31 16:33:12 -06:00
|
|
|
let len1 = reduce(counter, 0, (mod.list1));
|
|
|
|
let len2 = reduce(counter, 0, (mod.list2));
|
2019-01-10 18:38:14 -06:00
|
|
|
|
|
|
|
let rng = select (len1 >= len2), NULL, {
|
|
|
|
true = 0:(len1 - 1),
|
|
|
|
false = 0:(len2 - 1),
|
|
|
|
};
|
|
|
|
|
2019-01-24 20:04:40 -06:00
|
|
|
let reducer = func (acc, item) => acc{
|
2019-01-16 19:07:03 -06:00
|
|
|
result = acc.result + [[acc.list1.(item), acc.list2.(item)]],
|
|
|
|
idxs = acc.idxs + [item]
|
2019-01-10 18:38:14 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
let acc = {
|
|
|
|
list1 = mod.list1,
|
|
|
|
list2 = mod.list2,
|
|
|
|
result = [],
|
|
|
|
idxs = [],
|
|
|
|
};
|
|
|
|
|
2019-01-31 16:33:12 -06:00
|
|
|
let result = reduce(reducer, acc, rng).result;
|
2019-01-08 20:32:16 -06:00
|
|
|
};
|