ucg/std/strings.ucg

55 lines
1.5 KiB
Plaintext
Raw Normal View History

let ops = module {
str="",
} => {
let len = import "std/lists.ucg".len(mod.str);
let split_on = module{
on=" ",
str=mod.str,
} => (result) {
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
)
);
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;
};
};