diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-06-03 12:02:31 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-06-03 12:02:31 +0200 |
| commit | 99e5658feb48f15f85eaf9680affea2f490459bb (patch) | |
| tree | 61fa812185892845b36792960435f79e0535043f /src/Evaluation.hs | |
| parent | e8e86cea2bffe23961f0a1bea8ee770343894858 (diff) | |
| download | computorv2-99e5658feb48f15f85eaf9680affea2f490459bb.tar.gz computorv2-99e5658feb48f15f85eaf9680affea2f490459bb.tar.bz2 computorv2-99e5658feb48f15f85eaf9680affea2f490459bb.zip | |
Refactoring parsing, Fixing builtin, rewrite everything else
Diffstat (limited to 'src/Evaluation.hs')
| -rw-r--r-- | src/Evaluation.hs | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/Evaluation.hs b/src/Evaluation.hs index f0db71c..5356b30 100644 --- a/src/Evaluation.hs +++ b/src/Evaluation.hs @@ -1,25 +1,24 @@ module Evaluation where import Expr -import qualified Assignment as A -eval :: A.Context -> Expr -> Maybe Expr -eval c (Variable n) = do (A.Variable _ e) <- A.get c n - eval c e -eval c (Function n e) = do x <- eval c e - (A.Function _ param fe) <- A.get c n - let tmp = A.update c (A.Variable param x) - eval tmp fe -eval c (Add e1 e2) = evalInfix c e1 e2 (+?) -eval c (Sub e1 e2) = evalInfix c e1 e2 (-?) -eval c (Mul e1 e2) = evalInfix c e1 e2 (*?) -eval c (Div e1 e2) = evalInfix c e1 e2 (/?) -eval c (Mod e1 e2) = evalInfix c e1 e2 (%?) -eval c (Exp e1 e2) = evalInfix c e1 e2 (^?) -eval c (Dot e1 e2) = evalInfix c e1 e2 (**?) -eval c x = Just x - -evalInfix :: A.Context -> Expr -> Expr -> (Expr -> Expr -> Maybe Expr) -> Maybe Expr -evalInfix c e1 e2 f = do a <- eval c e1 - b <- eval c e2 - f a b +-- eval :: A.Context -> Expr -> Maybe Expr +-- eval c (Variable n) = do (A.Variable _ e) <- A.get c n +-- eval c e +-- eval c (Function n e) = do x <- eval c e +-- (A.Function _ param fe) <- A.get c n +-- let tmp = A.update c (A.Variable param x) +-- eval tmp fe +-- eval c (Add e1 e2) = evalInfix c e1 e2 (builtinAdd) +-- eval c (Sub e1 e2) = evalInfix c e1 e2 (builtinSub) +-- eval c (Mul e1 e2) = evalInfix c e1 e2 (builtinMul) +-- eval c (Div e1 e2) = evalInfix c e1 e2 (builtinDiv) +-- eval c (Mod e1 e2) = evalInfix c e1 e2 (builtinMod) +-- eval c (Exp e1 e2) = evalInfix c e1 e2 (builtinExp) +-- eval c (Dot e1 e2) = evalInfix c e1 e2 (builtinDot) +-- eval c x = Just x +-- +-- evalInfix :: A.Context -> Expr -> Expr -> (Expr -> Expr -> Maybe Expr) -> Maybe Expr +-- evalInfix c e1 e2 f = do a <- eval c e1 +-- b <- eval c e2 +-- f a b |
