summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2022-01-07 19:35:38 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2022-01-07 19:35:38 +0100
commit127f9c3fe7190a4e5daebf63b6fad7dd75af3257 (patch)
tree2e2e37de651acee10ca87f548919c9073f6718f7 /src/Tonkadur
parentb2d29a6ec8d55cebaae7cbff86375f05c77c2d11 (diff)
...
Diffstat (limited to 'src/Tonkadur')
-rw-r--r--src/Tonkadur/Execute.elm25
-rw-r--r--src/Tonkadur/PlayerInput.elm85
-rw-r--r--src/Tonkadur/Types.elm84
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
+ )
+ }