From 8eaae880f60775f257ee39d166f3af4b89d43220 Mon Sep 17 00:00:00 2001 From: Mart Lubbers Date: Wed, 20 Mar 2019 12:51:24 +0100 Subject: [PATCH] tuples --- check.icl | 23 ++++++++++++----------- int.dcl | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/check.icl b/check.icl index 574c178..ce09647 100644 --- a/check.icl +++ b/check.icl @@ -35,25 +35,26 @@ where ,(['_mul'], Forall [] $ TInt --> TInt --> TInt) ,(['_add'], Forall [] $ TInt --> TInt --> TInt) ,(['_sub'], Forall [] $ TInt --> TInt --> TInt) + ,(['_div'], Forall [] $ TInt --> TInt --> TInt) ] makeExpression :: [Function] Expression -> Expression -makeExpression fs start = foldr mkExpr start $ scc [(l, vars e [])\\(l, e)<-nicefuns] +makeExpression fs start = foldr mkExpr start $ scc $ map (appSnd vars) nicefuns where mkExpr :: [[Char]] -> (Expression -> Expression) mkExpr scc = Let [(l, e)\\(l, e)<-nicefuns, s<-scc | s == l] nicefuns :: [([Char], Expression)] - nicefuns = [(l, foldr (\x c->Lambda x o c) id i e)\\(Function l i e)<-fs] - - vars :: Expression [[Char]] -> [[Char]] - vars (Var v=:[m:_]) c = [v:c] - vars (App l r) c = vars l $ vars r c - vars (Lambda l e) c = [v\\v<-vars e c | v <> l] - vars (Let ns e) c = flatten - [ [v\\v<-vars e c | not (isMember v (map fst ns))] - : map (\(i, e)->[v\\v<-vars e [] | v <> i]) ns] - vars _ c = c + nicefuns = [(l, foldr ((o) o Lambda) id i e)\\(Function l i e)<-fs] + + vars :: Expression -> [[Char]] + vars (Var v) = [v] + vars (App l r) = vars l ++ vars r + vars (Lambda l e) = flt l e + vars (Let ns e) = flatten [[v\\v<-vars e | not (isMember v (map fst ns))]:map (uncurry flt) ns] + vars _ = [] + + flt i e = [v\\v<-vars e | v <> i] instance toString Scheme where toString (Forall [] t) = toString t diff --git a/int.dcl b/int.dcl index d314ca8..2e33982 100644 --- a/int.dcl +++ b/int.dcl @@ -4,5 +4,5 @@ from Data.Either import :: Either from ast import :: Expression, :: Value :: Eval a + int :: Expression -> Either [String] Value -eval :: Expression -> Eval Value -- 2.20.1