Skip to content

Instantly share code, notes, and snippets.

@Rizary
Last active September 16, 2018 10:47
Show Gist options
  • Save Rizary/55c2910205027a46a0c6a42485460afe to your computer and use it in GitHub Desktop.
Save Rizary/55c2910205027a46a0c6a42485460afe to your computer and use it in GitHub Desktop.
evaluate :: Program -> Value
evaluate [Bind _ _ _ e] = evalE E.empty e
evaluate bs = evalE E.empty (Let bs (Var "main"))
evalE :: VEnv -> Exp -> Value
-- Handle Variable case
evalE venv (Var var) =
case E.lookup venv var of
Just e -> e
Nothing -> Nil
-- Handle Num case
evalE venv (Num int) = I int
-- Handle Conditional case
evalE venv (Con "True") = B True
evalE venv (Con "False") = B False
-- Handle List case
evalE venv (Con "Nil") = Nil
-- Handle IF THEN ELSE
evalE venv (If exprA exprB exprC) =
case evalE venv exprA of
B True -> evalE venv exprB
_ -> evalE venv exprC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment