From cccef4554dfa74cc8b2f8c4887454871555d9080 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Mon, 4 Feb 2019 19:48:51 -0600 Subject: [PATCH] REFACTOR: refactor unnecessary modules into functions. --- std/lists.ucg | 23 ++++++----------------- std/tests/lists_test.ucg | 4 ++-- std/tuples.ucg | 26 ++++++-------------------- 3 files changed, 14 insertions(+), 39 deletions(-) diff --git a/std/lists.ucg b/std/lists.ucg index ead8dfb..1f39c7c 100644 --- a/std/lists.ucg +++ b/std/lists.ucg @@ -14,21 +14,9 @@ let str_join = module{ let result = reduce(joiner, {sep=mod.sep, out=""}, (mod.list)).out; }; -let len = module{ - list = NULL, -} => { - let counter = func (acc, item) => acc + 1; +let len = func(list) => reduce(func(acc, item) => acc + 1, 0, list); - let result = reduce(counter, 0, (mod.list)); -}; - -let reverse = module{ - list = NULL, -} => { - let reducer = func (acc, item) => [item] + acc; - - let result = reduce(reducer, [], (mod.list)); -}; +let reverse = func(list) => reduce(func (acc, item) => [item] + acc, [], list); let enumerate = module{ start = 0, @@ -50,10 +38,11 @@ let zip = module{ list1 = NULL, list2 = NULL, } => { - let counter = func (acc, item) => acc + 1; + let len = import "std/lists.ucg".len; - let len1 = reduce(counter, 0, (mod.list1)); - let len2 = reduce(counter, 0, (mod.list2)); + + let len1 = len(mod.list1); + let len2 = len(mod.list2); let rng = select (len1 >= len2), NULL, { true = 0:(len1 - 1), diff --git a/std/tests/lists_test.ucg b/std/tests/lists_test.ucg index 1d227a7..6c97c9f 100644 --- a/std/tests/lists_test.ucg +++ b/std/tests/lists_test.ucg @@ -11,12 +11,12 @@ assert asserts.equal{ }; assert asserts.equal{ - left=list.len{list=[0, 1, 2, 3]}.result, + left=list.len([0, 1, 2, 3]), right=4, }; assert asserts.equal{ - left = list.reverse{list=[0, 1, 2, 3]}.result, + left = list.reverse([0, 1, 2, 3]), right = [3, 2, 1, 0], }; diff --git a/std/tuples.ucg b/std/tuples.ucg index 9e0bfc8..a8d7cfa 100644 --- a/std/tuples.ucg +++ b/std/tuples.ucg @@ -10,9 +10,7 @@ let fields = module{ // First we check that mod.tpl is a tuple. assert_tuple(mod.tpl); - let reducer = func (acc, field, value) => acc + [field]; - - let result = reduce(reducer, [], (mod.tpl)); + let result = reduce(func (acc, field, value) => acc + [field], [], (mod.tpl)); }; // return a list of the values in a tuple. @@ -23,9 +21,7 @@ let values = module{ // First we check that mod.tpl is a tuple. assert_tuple(mod.tpl); - let reducer = func (acc, field, value) => acc + [value]; - - let result = reduce(reducer, [], (mod.tpl)); + let result = reduce(func (acc, field, value) => acc + [value], [], (mod.tpl)); }; let iter = module{ @@ -35,9 +31,7 @@ let iter = module{ // First we check that mod.tpl is a tuple. assert_tuple(mod.tpl); - let reducer = func (acc, field, value) => acc + [[field, value]]; - - let result = reduce(reducer, [], (mod.tpl)); + let result = reduce(func (acc, field, value) => acc + [[field, value]], [], (mod.tpl)); }; let strip_nulls = module{ @@ -47,9 +41,7 @@ let strip_nulls = module{ // First we check that mod.tpl is a tuple. assert_tuple(mod.tpl); - let filterer = func (name, value) => value != NULL; - - let result = filter(filterer, (mod.tpl)); + let result = filter(func (name, value) => value != NULL, (mod.tpl)); }; let has_fields = module{ @@ -62,9 +54,7 @@ let has_fields = module{ let fs = lib.fields{tpl=mod.tpl}.result; - let reducer = func (acc, f) => acc && (f in fs); - - let result = reduce(reducer, true, (mod.fields)); + let result = reduce(reducer = func (acc, f) => acc && (f in fs), true, (mod.fields)); }; let field_type = module{ @@ -86,8 +76,6 @@ let field_type = module{ false = fail "@ is not a string" % (mod.type), }; - let has_field = lib.has_fields{tpl=mod.tpl, fields=[mod.field]}.result; - let it = lib.iter{tpl=mod.tpl}.result; let reducer = func (acc, l) => acc && (select l.0 == mod.field, NULL, { @@ -95,7 +83,5 @@ let field_type = module{ false = true, // if this isn't the field then we propagate true }); - let is_type = reduce(reducer, true, it); - - let result = has_field && is_type; + let result = lib.has_fields{tpl=mod.tpl, fields=[mod.field]}.result && reduce(reducer, true, it); }; \ No newline at end of file