mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-21 18:10:42 -04:00
38 lines
1.0 KiB
Plaintext
38 lines
1.0 KiB
Plaintext
|
let ops = module {
|
||
|
str="",
|
||
|
} => {
|
||
|
let split_on = module{
|
||
|
on=" ",
|
||
|
str=mod.str,
|
||
|
} => {
|
||
|
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
|
||
|
)
|
||
|
);
|
||
|
};
|