🚀 Functions

This commit is contained in:
2024-09-06 14:10:00 +02:00
parent 1627f4c6aa
commit b4f8b71ade
4 changed files with 47 additions and 27 deletions

View File

@ -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.