2019-02-18 20:15:20 -06:00
|
|
|
let ops = module {
|
|
|
|
str="",
|
|
|
|
} => {
|
2019-04-12 21:13:24 -05:00
|
|
|
let len = import "std/lists.ucg".len(mod.str);
|
|
|
|
|
2019-02-18 20:15:20 -06:00
|
|
|
let split_on = module{
|
|
|
|
on=" ",
|
|
|
|
str=mod.str,
|
2019-02-24 08:16:07 -06:00
|
|
|
} => (result) {
|
2019-02-18 20:15:20 -06:00
|
|
|
let splitter = func(acc, char) => acc{
|
|
|
|
out = select char == mod.on, acc.out, {
|
|
|
|
true = acc.out + [acc.buf],
|
|
|
|
},
|
|
|
|
buf = select char != mod.on, "", {
|
|
|
|
true = acc.buf + char,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
let accumulated = reduce(splitter, {out=[], buf=""}, mod.str);
|
|
|
|
|
|
|
|
let result = accumulated.out + [accumulated.buf];
|
|
|
|
};
|
|
|
|
|
|
|
|
let split_at = func(idx) => filter(
|
|
|
|
func(name, val) => name != "counter",
|
|
|
|
reduce(
|
|
|
|
func(acc, char) => acc{
|
|
|
|
counter = acc.counter + 1,
|
|
|
|
left = select acc.counter < idx, acc.left, {
|
|
|
|
true = acc.left + char,
|
|
|
|
},
|
|
|
|
right = select acc.counter >= idx, acc.right, {
|
|
|
|
true = acc.right + char,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{counter = 0, left = "", right = ""},
|
|
|
|
mod.str
|
|
|
|
)
|
|
|
|
);
|
2019-04-12 21:13:24 -05:00
|
|
|
|
|
|
|
let substr = module{
|
|
|
|
str = mod.str,
|
|
|
|
start = 0,
|
|
|
|
end = len,
|
|
|
|
} => (result) {
|
|
|
|
let reducer = func(acc, char) => acc{
|
|
|
|
counter = acc.counter + 1,
|
|
|
|
str = select ((acc.counter >= mod.start) && (acc.counter <= mod.end)), acc.str, {
|
|
|
|
true = acc.str + char,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
let result = reduce(
|
|
|
|
reducer, {counter = 0, str = ""}, mod.str).str;
|
|
|
|
};
|
2019-02-18 20:15:20 -06:00
|
|
|
};
|