From b6b3acf3505fd5249ac7471e764aa29fa856fe99 Mon Sep 17 00:00:00 2001 From: sforman Date: Sat, 29 Jul 2023 07:32:56 -0700 Subject: [PATCH] Binary Math Ops --- implementations/Elm/src/Joy.elm | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/implementations/Elm/src/Joy.elm b/implementations/Elm/src/Joy.elm index 331bfe2..c0fa384 100644 --- a/implementations/Elm/src/Joy.elm +++ b/implementations/Elm/src/Joy.elm @@ -2,6 +2,7 @@ module Joy exposing (doit) import String exposing (replace, words) import Result exposing (andThen) +import Bitwise type JoyType @@ -33,21 +34,31 @@ joy stack expression = joy_eval : String -> (List JoyType) -> (List JoyType) -> Result String (List JoyType, List JoyType) joy_eval symbol stack expression = case symbol of - "+" -> joy_add stack expression + "+" -> joy_binary_math_op (+) stack expression + "-" -> joy_binary_math_op (-) stack expression + "*" -> joy_binary_math_op (*) stack expression + "/" -> joy_binary_math_op (//) stack expression + "%" -> joy_binary_math_op (modBy) stack expression + "and" -> joy_binary_math_op (Bitwise.and) stack expression + "or" -> joy_binary_math_op (Bitwise.or) stack expression + "xor" -> joy_binary_math_op (Bitwise.xor) stack expression _ -> Err ("Unknown word: " ++ symbol) -joy_add : (List JoyType) -> (List JoyType) -> Result String (List JoyType, List JoyType) -joy_add stack expression = +joy_binary_math_op : (Int -> Int -> Int) -> (List JoyType) -> (List JoyType) -> Result String (List JoyType, List JoyType) +joy_binary_math_op op stack expression = case pop_int(stack) of Ok (a, s0) -> case pop_int(s0) of Ok (b, s1) -> - Ok ((push_int ((+) a b) s1), expression) + Ok ((push_int (op b a) s1), expression) Err msg -> Err msg Err msg -> Err msg + + + push_int : Int -> (List JoyType) -> (List JoyType) push_int i stack = (JoyInt i) :: stack -- 2.11.0