Binary Math Ops
This commit is contained in:
parent
dc065d1943
commit
b6b3acf350
|
|
@ -2,6 +2,7 @@ module Joy exposing (doit)
|
||||||
|
|
||||||
import String exposing (replace, words)
|
import String exposing (replace, words)
|
||||||
import Result exposing (andThen)
|
import Result exposing (andThen)
|
||||||
|
import Bitwise
|
||||||
|
|
||||||
|
|
||||||
type JoyType
|
type JoyType
|
||||||
|
|
@ -33,21 +34,31 @@ joy stack expression =
|
||||||
joy_eval : String -> (List JoyType) -> (List JoyType) -> Result String (List JoyType, List JoyType)
|
joy_eval : String -> (List JoyType) -> (List JoyType) -> Result String (List JoyType, List JoyType)
|
||||||
joy_eval symbol stack expression =
|
joy_eval symbol stack expression =
|
||||||
case symbol of
|
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)
|
_ -> Err ("Unknown word: " ++ symbol)
|
||||||
|
|
||||||
|
|
||||||
joy_add : (List JoyType) -> (List JoyType) -> Result String (List JoyType, List JoyType)
|
joy_binary_math_op : (Int -> Int -> Int) -> (List JoyType) -> (List JoyType) -> Result String (List JoyType, List JoyType)
|
||||||
joy_add stack expression =
|
joy_binary_math_op op stack expression =
|
||||||
case pop_int(stack) of
|
case pop_int(stack) of
|
||||||
Ok (a, s0) ->
|
Ok (a, s0) ->
|
||||||
case pop_int(s0) of
|
case pop_int(s0) of
|
||||||
Ok (b, s1) ->
|
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
|
||||||
Err msg -> Err msg
|
Err msg -> Err msg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
push_int : Int -> (List JoyType) -> (List JoyType)
|
push_int : Int -> (List JoyType) -> (List JoyType)
|
||||||
push_int i stack = (JoyInt i) :: stack
|
push_int i stack = (JoyInt i) :: stack
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue