I have to check into this: the Python version has "bool" and no
"truthy".
This commit is contained in:
sforman 2023-07-29 10:19:39 -07:00
parent 7c9ea764ea
commit 99a5fd93b1
1 changed files with 23 additions and 0 deletions

View File

@ -52,6 +52,7 @@ joy_eval symbol stack expression =
"stack" -> joy_stack stack expression "stack" -> joy_stack stack expression
"swaack" -> joy_swaack stack expression "swaack" -> joy_swaack stack expression
"swap" -> joy_swap stack expression "swap" -> joy_swap stack expression
"truthy" -> joy_truthy stack expression
_ -> Err ("Unknown word: " ++ symbol) _ -> Err ("Unknown word: " ++ symbol)
@ -143,6 +144,28 @@ joy_swap stack expression =
Err msg -> Err msg Err msg -> Err msg
joy_truthy : JList -> JList -> Result String (JList, JList)
joy_truthy stack expression =
case pop_any(stack) of
Ok (a, s0) ->
case a of
JoyTrue -> Ok (stack, expression)
JoyFalse -> Ok (stack, expression)
JoyInt i ->
if 0 == i then
Ok (JoyFalse :: s0, expression)
else
Ok (JoyTrue :: s0, expression)
JoyList el ->
if [] == el then
Ok (JoyFalse :: s0, expression)
else
Ok (JoyTrue :: s0, expression)
JoySymbol _ ->
Err "Cannot Boolify."
Err msg -> Err msg
push_int : Int -> JList -> JList push_int : Int -> JList -> JList
push_int i stack = (JoyInt i) :: stack push_int i stack = (JoyInt i) :: stack