🚀 Functions
This commit is contained in:
@ -11,6 +11,7 @@ import APL.AST (Exp (..), VName)
|
||||
data Val
|
||||
= ValInt Integer
|
||||
| ValBool Bool
|
||||
| ValFun Env VName Exp
|
||||
deriving (Eq, Show)
|
||||
|
||||
type Env = [(VName, Val)]
|
||||
@ -78,5 +79,13 @@ eval env (Let var e1 e2) =
|
||||
case eval env e1 of
|
||||
Left err -> Left err
|
||||
Right v -> eval (envExtend var v env) e2
|
||||
eval env (Lambda var e) = Right $ ValFun env var e
|
||||
eval env (Apply e1 e2) =
|
||||
case (eval env e1, eval env e2) of
|
||||
(Left err, _) -> Left err
|
||||
(_, Left err) -> Left err
|
||||
(Right (ValFun env2 var e3), Right x) -> eval (envExtend var x env2) e3
|
||||
(_, _) -> Left "Applying non-function"
|
||||
|
||||
|
||||
-- TODO: Add cases after extending Exp.
|
||||
|
Reference in New Issue
Block a user