OSDN Git Service

Binary Math Ops
authorsforman <sforman@hushmail.com>
Sat, 29 Jul 2023 14:32:56 +0000 (07:32 -0700)
committersforman <sforman@hushmail.com>
Sat, 29 Jul 2023 14:32:56 +0000 (07:32 -0700)
implementations/Elm/src/Joy.elm

index 331bfe2..c0fa384 100644 (file)
@@ -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