mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-22 18:19:54 -04:00
STDLIB: More stdlib additions.
* list reverse * enumerate for tuples
This commit is contained in:
parent
db809fad97
commit
d2a5a1619a
@ -26,6 +26,16 @@ let len = module{
|
||||
let result = reduce counter.result 0, (mod.list);
|
||||
};
|
||||
|
||||
let reverse = module{
|
||||
list = NULL,
|
||||
} => {
|
||||
let reducer = macro(acc, item) => {
|
||||
result = [item] + acc,
|
||||
};
|
||||
|
||||
let result = reduce reducer.result [], (mod.list);
|
||||
};
|
||||
|
||||
let enumerate = module{
|
||||
start = 0,
|
||||
step = 1,
|
||||
|
@ -15,6 +15,11 @@ assert asserts.equal{
|
||||
right=4,
|
||||
};
|
||||
|
||||
assert asserts.equal{
|
||||
left = list.reverse{list=[0, 1, 2, 3]}.result,
|
||||
right = [3, 2, 1, 0],
|
||||
};
|
||||
|
||||
assert asserts.equal{
|
||||
left=list.enumerate{list=["foo", "bar"]}.result,
|
||||
right=[[0, "foo"], [1, "bar"]],
|
||||
|
@ -9,4 +9,9 @@ assert t.asserts{}.equal{
|
||||
assert t.asserts{}.equal{
|
||||
left = tpl.values{tpl={foo=1, bar=2}}.result,
|
||||
right = [1, 2],
|
||||
};
|
||||
|
||||
assert t.asserts{}.equal{
|
||||
left = tpl.enumerate{tpl={foo=1, bar=2}}.result,
|
||||
right = [["foo", 1], ["bar", 2]],
|
||||
};
|
@ -1,4 +1,5 @@
|
||||
|
||||
// return a list of the fields in a tuple.
|
||||
let fields = module{
|
||||
tpl = NULL,
|
||||
} => {
|
||||
@ -9,6 +10,7 @@ let fields = module{
|
||||
let result = reduce reducer.result [], (mod.tpl);
|
||||
};
|
||||
|
||||
// return a list of the values in a tuple.
|
||||
let values = module{
|
||||
tpl = NULL,
|
||||
} => {
|
||||
@ -16,5 +18,15 @@ let values = module{
|
||||
result = acc + [value],
|
||||
};
|
||||
|
||||
let result = reduce reducer.result [], (mod.tpl);
|
||||
};
|
||||
|
||||
let enumerate = module{
|
||||
tpl = NULL,
|
||||
} => {
|
||||
let reducer = macro(acc, field, value) => {
|
||||
result = acc + [[field, value]],
|
||||
};
|
||||
|
||||
let result = reduce reducer.result [], (mod.tpl);
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user