From 234ec399859a0906f25a35a59bbef4e0b774321b Mon Sep 17 00:00:00 2001 From: Nikolaj Gade Date: Fri, 20 Sep 2024 13:10:36 +0200 Subject: [PATCH] :key: key-value pairs --- a2/a2-handout/src/APL/AST.hs | 2 ++ a2/a2-handout/src/APL/Eval.hs | 29 +++++++++++++++++++++++----- a2/a2-handout/src/APL/Eval_Tests.hs | 12 +++++++++++- a2/a2.pdf | Bin 85593 -> 85864 bytes 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/a2/a2-handout/src/APL/AST.hs b/a2/a2-handout/src/APL/AST.hs index 1e8eff3..8ceb5b0 100644 --- a/a2/a2-handout/src/APL/AST.hs +++ b/a2/a2-handout/src/APL/AST.hs @@ -22,4 +22,6 @@ data Exp | Apply Exp Exp | TryCatch Exp Exp | Print String Exp + | KvPut Exp Exp + | KvGet Exp deriving (Eq, Show) diff --git a/a2/a2-handout/src/APL/Eval.hs b/a2/a2-handout/src/APL/Eval.hs index ab72bd8..e110ed8 100644 --- a/a2/a2-handout/src/APL/Eval.hs +++ b/a2/a2-handout/src/APL/Eval.hs @@ -17,13 +17,13 @@ data Val type Env = [(VName, Val)] -type State = [String] +type State = ([(Val,Val)],[String]) envEmpty :: Env envEmpty = [] stateEmpty :: State -stateEmpty = [] +stateEmpty = ([],[]) envExtend :: VName -> Val -> Env -> Env envExtend v val env = (v, val) : env @@ -65,11 +65,13 @@ catch (EvalM m1) (EvalM m2) = EvalM $ \env state -> (state', Left _) -> m2 env state' (state', Right x) -> (state', Right x) -runEval :: EvalM a -> (State, Either Error a) -runEval (EvalM m) = m envEmpty stateEmpty +runEval :: EvalM a -> ([String], Either Error a) +runEval (EvalM m) = do + case m envEmpty stateEmpty of + ((_,s),v) -> (s,v) evalPrint :: String -> EvalM () -evalPrint a = EvalM $ \_env state -> (state ++ [a], Right ()) +evalPrint a = EvalM $ \_env (k,s) -> ((k,s++[a]), Right ()) evalIntBinOp :: (Integer -> Integer -> EvalM Integer) -> Exp -> Exp -> EvalM Val evalIntBinOp f e1 e2 = do @@ -85,6 +87,15 @@ evalIntBinOp' f e1 e2 = where f' x y = pure $ f x y +evalKvGet :: Val -> EvalM Val +evalKvGet a = EvalM $ \_env (k,s) -> do + case lookup a k of + (Just v) -> ((k,s), Right v) + (Nothing) -> ((k,s), Left ("Invalid key: "++(show a))) + +evalKvPut :: Val -> Val -> EvalM () +evalKvPut a b = EvalM $ \_env (k,s) -> (((a,b):k,s), Right ()) + eval :: Exp -> EvalM Val eval (CstInt x) = pure $ ValInt x eval (CstBool b) = pure $ ValBool b @@ -147,3 +158,11 @@ eval (Print s e1) = do (ValFun _ _ _) -> do evalPrint (s++": #") pure $ v1 +eval (KvPut e1 e2) = do + v1 <- eval e1 + v2 <- eval e2 + evalKvPut v1 v2 + pure $ v2 +eval (KvGet e) = do + v <- eval e + evalKvGet v diff --git a/a2/a2-handout/src/APL/Eval_Tests.hs b/a2/a2-handout/src/APL/Eval_Tests.hs index c1f35b9..9ab7847 100644 --- a/a2/a2-handout/src/APL/Eval_Tests.hs +++ b/a2/a2-handout/src/APL/Eval_Tests.hs @@ -92,7 +92,17 @@ evalTests = testCase "PrintFun" $ eval' (Print "Test" (Lambda "x" (Mul (Var "x") (Var "x")))) - @?= (["Test: #"], Right (ValFun [] "x" (Mul (Var "x") (Var "x")))) + @?= (["Test: #"], Right (ValFun [] "x" (Mul (Var "x") (Var "x")))), + -- + testCase "KvPut" $ + eval' + (KvPut (CstInt 1) (CstInt 2)) + @?= ([], Right (ValInt 2)), + -- + testCase "KvGet" $ + eval' + (Let "x" (KvPut (CstInt 0) (CstBool True)) (Let "y" (KvPut (CstInt 0) (CstBool False)) (KvGet (CstInt 0)))) + @?= ([], Right (ValBool False)) ] tests :: TestTree diff --git a/a2/a2.pdf b/a2/a2.pdf index e74d2c73855b7cfb602e90fa34909f77015ee780..3f4c8ecfad582a530dddb1f3ac5933880ea4e02c 100644 GIT binary patch delta 18296 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 HMNdWwDu2lB