| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2022-01-07 19:35:38 +0100 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2022-01-07 19:35:38 +0100 |
| commit | 127f9c3fe7190a4e5daebf63b6fad7dd75af3257 (patch) | |
| tree | 2e2e37de651acee10ca87f548919c9073f6718f7 /src/Tonkadur | |
| parent | b2d29a6ec8d55cebaae7cbff86375f05c77c2d11 (diff) | |
...
Diffstat (limited to 'src/Tonkadur')
| -rw-r--r-- | src/Tonkadur/Execute.elm | 25 | ||||
| -rw-r--r-- | src/Tonkadur/PlayerInput.elm | 85 | ||||
| -rw-r--r-- | src/Tonkadur/Types.elm | 84 |
3 files changed, 88 insertions, 106 deletions
diff --git a/src/Tonkadur/Execute.elm b/src/Tonkadur/Execute.elm index d302cc5..4a94701 100644 --- a/src/Tonkadur/Execute.elm +++ b/src/Tonkadur/Execute.elm @@ -105,18 +105,11 @@ initialize type_name address state = new_state = {state | memory = - (Tonkadur.Types.apply_at_address + (Tonkadur.Types.set_at_address address_as_list - (\last_addr dict -> - (Dict.insert - last_addr - (Tonkadur.Types.get_default state type_name) - dict - ) - ) + (Tonkadur.Types.get_default state type_name) state.memory ) - -- TODO: detect allocated memory for special handling. } in case address_as_list of @@ -268,11 +261,11 @@ set_random address min max state = in {state | memory = - (Tonkadur.Types.apply_at_address + (Tonkadur.Types.set_at_address (Tonkadur.Types.value_to_address (Tonkadur.Compute.compute state address) ) - (\last_addr dict -> (Dict.insert last_addr (Tonkadur.Types.IntValue value) dict)) + (Tonkadur.Types.IntValue value) state.memory ), @@ -288,17 +281,11 @@ set : ( set address value state = {state | memory = - (Tonkadur.Types.apply_at_address + (Tonkadur.Types.set_at_address (Tonkadur.Types.value_to_address (Tonkadur.Compute.compute state address) ) - (\last_addr dict -> - (Dict.insert - last_addr - (Tonkadur.Compute.compute state value) - dict - ) - ) + (Tonkadur.Compute.compute state value) state.memory ) } diff --git a/src/Tonkadur/PlayerInput.elm b/src/Tonkadur/PlayerInput.elm deleted file mode 100644 index facf9e5..0000000 --- a/src/Tonkadur/PlayerInput.elm +++ /dev/null @@ -1,85 +0,0 @@ -module Tonkadur.PlayerInput exposing (..) - --- Elm ------------------------------------------------------------------------- -import Dict -import List - --- Tonkadur -------------------------------------------------------------------- -import Tonkadur.Types - --------------------------------------------------------------------------------- --- TYPES ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- LOCAL ----------------------------------------------------------------------- --------------------------------------------------------------------------------- - --------------------------------------------------------------------------------- --- EXPORTED -------------------------------------------------------------------- --------------------------------------------------------------------------------- -select_choice : Int -> Tonkadur.Types.State -> Tonkadur.Types.State -select_choice index state = {state | last_choice_index = index} - -input_string : String -> Tonkadur.Types.State -> Tonkadur.Types.State -input_string string state = - {state | - memory = - (Tonkadur.Types.apply_at_address - (Tonkadur.Types.value_to_address state.memorized_target) - (\last_address dict -> - (Dict.insert last_address (StringValue string) dict) - ) - state.memory - ) - } - -input_int : Int -> Tonkadur.Types.State -> Tonkadur.Types.State -input_int int state = - {state | - memory = - (Tonkadur.Types.apply_at_address - (Tonkadur.Types.value_to_address state.memorized_target) - (\last_address dict -> - (Dict.insert last_address (IntValue int) dict) - ) - state.memory - ) - } - -input_command : ( - (List String) -> - Tonkadur.Types.State -> - Tonkadur.Types.State - ) -input_command commands state = - {state | - memory = - (Tonkadur.Types.apply_at_address - (Tonkadur.Types.value_to_address state.memorized_target) - (\last_address dict -> - (Dict.insert - last_address - (ListValue - (Dict.fromList - (List.indexedMap - (\index value -> - ( - ( - case (String.fromInt index) of - (Just i) -> i - Nothing -> "invalid_index" - ), - value - ) - ) - commands - ) - ) - ) - dict - ) - ) - state.memory - ) - } diff --git a/src/Tonkadur/Types.elm b/src/Tonkadur/Types.elm index bf8ae56..77cd707 100644 --- a/src/Tonkadur/Types.elm +++ b/src/Tonkadur/Types.elm @@ -318,9 +318,89 @@ apply_at_address address fun memory = memory ) +set_at_address : ( + (List String) -> + Value -> + (Dict.Dict String Value) -> + (Dict.Dict String Value) + ) +set_at_address address value memory = + (apply_at_address + address + (\last_address dict -> (Dict.insert last_address value dict)) + memory + ) + allow_continuing : State -> State allow_continuing state = {state | last_instruction_effect = MustContinue} compare_pointers : (List String) -> (List String) -> Int -compare_pointers p0 p1 = 0 - -- TODO: implement +compare_pointers p0 p1 = + case (p0, p1) of + ((h0 :: t0), (h1 :: t1)) -> + if (h0 == h1) + then (compare_pointers t0 t1) + else if (h0 < h1) + then -1 + else 1 + + ([], []) -> 0 + (_, []) -> 1 + ([], _) -> -1 + +elm_list_to_wyrd_list : (x -> Value) -> (List x) -> Value +elm_list_to_wyrd_list elm_value_to_wyrd_value list = + let + (final_next_index, final_as_dict) = + (List.foldl + (\value (next_index, as_dict) -> + ( + (next_index + 1), + (Dict.insert + (String.fromInt next_index) + (elm_value_to_wyrd_value value) + as_dict + ) + ) + ) + (0, (Dict.empty)) + list + ) + in + (ListValue final_as_dict) + +set_last_choice_index : Int -> State -> State +set_last_choice_index ix state = {state | last_choice_index = ix} + +set_target_from_string : String -> State -> State +set_target_from_string str state = + {state | + memory = + (set_at_address + (value_to_address state.memorized_target) + (StringValue str) + state.memory + ) + } + +set_target_from_integer : Int -> State -> State +set_target_from_integer int state = + {state | + memory = + (set_at_address + (value_to_address state.memorized_target) + (IntValue int) + state.memory + ) + } + +set_target_from_command : (List String) -> State -> State +set_target_from_command list state = + {state | + memory = + (set_at_address + (value_to_address state.memorized_target) + (elm_list_to_wyrd_list (\command -> (StringValue command)) list) + state.memory + ) + } |


