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 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{
|
let enumerate = module{
|
||||||
start = 0,
|
start = 0,
|
||||||
step = 1,
|
step = 1,
|
||||||
|
@ -15,6 +15,11 @@ assert asserts.equal{
|
|||||||
right=4,
|
right=4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
assert asserts.equal{
|
||||||
|
left = list.reverse{list=[0, 1, 2, 3]}.result,
|
||||||
|
right = [3, 2, 1, 0],
|
||||||
|
};
|
||||||
|
|
||||||
assert asserts.equal{
|
assert asserts.equal{
|
||||||
left=list.enumerate{list=["foo", "bar"]}.result,
|
left=list.enumerate{list=["foo", "bar"]}.result,
|
||||||
right=[[0, "foo"], [1, "bar"]],
|
right=[[0, "foo"], [1, "bar"]],
|
||||||
|
@ -9,4 +9,9 @@ assert t.asserts{}.equal{
|
|||||||
assert t.asserts{}.equal{
|
assert t.asserts{}.equal{
|
||||||
left = tpl.values{tpl={foo=1, bar=2}}.result,
|
left = tpl.values{tpl={foo=1, bar=2}}.result,
|
||||||
right = [1, 2],
|
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{
|
let fields = module{
|
||||||
tpl = NULL,
|
tpl = NULL,
|
||||||
} => {
|
} => {
|
||||||
@ -9,6 +10,7 @@ let fields = module{
|
|||||||
let result = reduce reducer.result [], (mod.tpl);
|
let result = reduce reducer.result [], (mod.tpl);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// return a list of the values in a tuple.
|
||||||
let values = module{
|
let values = module{
|
||||||
tpl = NULL,
|
tpl = NULL,
|
||||||
} => {
|
} => {
|
||||||
@ -16,5 +18,15 @@ let values = module{
|
|||||||
result = acc + [value],
|
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);
|
let result = reduce reducer.result [], (mod.tpl);
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user