mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-22 18:19:54 -04:00
42 lines
966 B
Plaintext
42 lines
966 B
Plaintext
|
let str_join = module{
|
||
|
sep=" ",
|
||
|
list=NULL,
|
||
|
} => {
|
||
|
let joiner = macro(acc, item) => {
|
||
|
result = select (acc.out == ""), NULL, {
|
||
|
true = acc{
|
||
|
out="@@" % (acc.out,item),
|
||
|
},
|
||
|
false = acc{
|
||
|
out="@@@" % (acc.out, acc.sep, item),
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
|
||
|
let result = (reduce joiner.result {sep=mod.sep, out=""}, (mod.list)).out;
|
||
|
};
|
||
|
|
||
|
let len = module{
|
||
|
list = NULL,
|
||
|
} => {
|
||
|
let counter = macro(acc, item) => {
|
||
|
result = acc + 1,
|
||
|
};
|
||
|
|
||
|
let result = reduce counter.result 0, (mod.list);
|
||
|
};
|
||
|
|
||
|
let enumerate = module{
|
||
|
start = 0,
|
||
|
step = 1,
|
||
|
list = NULL,
|
||
|
} => {
|
||
|
let reducer = macro(acc, item) => {
|
||
|
result = acc{count = acc.count + acc.step, list=acc.list + [[acc.count, item]]},
|
||
|
};
|
||
|
|
||
|
let acc = {count=mod.start, list=[], step=mod.step};
|
||
|
|
||
|
let enumerated = reduce reducer.result acc, (mod.list);
|
||
|
let result = enumerated.list;
|
||
|
};
|