| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-12-13 19:09:39 +0100 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-12-13 19:09:39 +0100 | 
| commit | f5cbc0b753fb94785024ed81bb3738c10434bd61 (patch) | |
| tree | e60356a2dcda87533ac1d260d2859ddb5f6e9147 /src/ataxic.erl | |
| parent | 6e983617288abafcdcfd7fcf26fc246302a388f7 (diff) | |
...
Diffstat (limited to 'src/ataxic.erl')
| -rw-r--r-- | src/ataxic.erl | 39 | 
1 files changed, 21 insertions, 18 deletions
| diff --git a/src/ataxic.erl b/src/ataxic.erl index 5f8c912..7dda875 100644 --- a/src/ataxic.erl +++ b/src/ataxic.erl @@ -7,17 +7,24 @@  %%%% BASIC OP %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%% Select  -record(field, {ix :: non_neg_integer(), op :: basic()}). --record(array_cell, {ix :: non_neg_integer(), op :: basic()}).  %%%% Sequence of instructions  -record(seq, {ops :: list(basic())}).  %%%% List --record(list_append, {values :: list(any()), head :: boolean()}). -  -record(const, {value :: any()}).  -record(current, {}). +-record +( +   apply_fun, +   { +      module :: atom(), +      function :: atom(), +      params :: list(basic()) +   } +). +  %%%% Number Comparison  -record(gt, {p0 :: basic(), p1 :: basic()}).  -record(ge, {p0 :: basic(), p1 :: basic()}). @@ -51,9 +58,8 @@  (     [        on_field/2, -      on_array_cell/2, +      apply_function/3,        sequence/1, -      append_to_list/2,        constant/1,        current_value/0,        ge/2, @@ -85,18 +91,17 @@  -spec basic_apply_to (basic(), any()) -> any().  basic_apply_to (#field{ ix = IX, op = OP}, Val) ->     setelement(IX, Val, basic_apply_to(OP, element(IX, Val))); -basic_apply_to (#array_cell{ ix = IX, op = OP }, Val) -> -   array:set(IX, basic_apply_to(OP, array:get(IX, Val)), Val); +basic_apply_to (#apply_fun{ module = M, function = F, params = P }, Val) -> +   erlang:apply +   ( +      M, +      F, +      lists:map(fun (Param) -> basic_apply_to(Param, Val) end, P) +   );  basic_apply_to (#seq{ ops = List }, Val) ->     lists:foldl(fun basic_apply_to/2, Val, List); -basic_apply_to (#list_append { values = List, head = Head }, Val) -> -   case Head of -      true -> (List ++ Val); -      _ -> (Val ++ List) -   end; -  basic_apply_to (#const{ value = Val }, _Val) ->     Val;  basic_apply_to (#current{}, Val) -> @@ -128,14 +133,12 @@ basic_apply_to (#neg{ param = V }, _Val) ->  -spec on_field (non_neg_integer(), basic()) -> basic().  on_field (IX, OP) -> #field{ ix = IX, op = OP }. --spec on_array_cell (non_neg_integer(), basic()) -> basic(). -on_array_cell (IX, OP) -> #array_cell{ ix = IX, op = OP }. -  -spec sequence (list(basic())) -> basic().  sequence (List) -> #seq{ ops = List }. --spec append_to_list (list(any()), boolean()) -> basic(). -append_to_list (List, Head) -> #list_append { values = List, head = Head }. +-spec apply_function (atom(), atom(), list(basic())) -> basic(). +apply_function (Module, Function, Params) -> +   #apply_fun{ module = Module, function = Function, params = Params}.  -spec constant (any()) -> basic().  constant (Val) -> #const{ value = Val }. | 


