STDLIB: More stdlib additions.

* list reverse
* enumerate for tuples
This commit is contained in:
Jeremy Wall 2019-01-09 22:33:03 -06:00
parent db809fad97
commit d2a5a1619a
4 changed files with 32 additions and 0 deletions

View File

@ -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,

View File

@ -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"]],

View File

@ -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]],
}; };

View File

@ -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);
}; };