diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-03-16 16:27:39 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-03-16 16:27:39 +0100 |
| commit | 9a4cf15fc0e724e6bc93c6530b47ca45836da5ba (patch) | |
| tree | bb1c91857d632be1e61ad92d2ce69243cc710741 /src/Expr.hs | |
| parent | 8c8f6155f1b05230c271059c52a503211aec872b (diff) | |
| download | computorv2-9a4cf15fc0e724e6bc93c6530b47ca45836da5ba.tar.gz computorv2-9a4cf15fc0e724e6bc93c6530b47ca45836da5ba.tar.bz2 computorv2-9a4cf15fc0e724e6bc93c6530b47ca45836da5ba.zip | |
variable and function context between prompts
Diffstat (limited to 'src/Expr.hs')
| -rw-r--r-- | src/Expr.hs | 62 |
1 files changed, 2 insertions, 60 deletions
diff --git a/src/Expr.hs b/src/Expr.hs index e3d8aef..7a1b5e5 100644 --- a/src/Expr.hs +++ b/src/Expr.hs @@ -2,11 +2,11 @@ module Expr where import Data.List - data Atom = Rational Float | Imaginary Float | Matrix [[Expr]] + deriving (Eq) data Expr = EAtom Atom @@ -19,65 +19,7 @@ data Expr | Dot Expr Expr | Variable String | Function String Expr - -eval :: Expr -> Maybe Atom -eval (EAtom a) = Just a -eval (Add e1 e2) = evalInfix e1 e2 (+?) -eval (Sub e1 e2) = evalInfix e1 e2 (-?) -eval (Mul e1 e2) = evalInfix e1 e2 (*?) -eval (Div e1 e2) = evalInfix e1 e2 (/?) -eval (Mod e1 e2) = evalInfix e1 e2 (%?) -eval (Exp e1 e2) = evalInfix e1 e2 (^?) -eval (Dot e1 e2) = evalInfix e1 e2 (**?) -eval _ = Nothing - -evalInfix :: Expr -> Expr -> (Atom -> Atom -> Maybe Atom) -> Maybe Atom -evalInfix e1 e2 f = do a <- eval e1 - b <- eval e2 - f a b - -infixl 6 +? -(+?) :: Atom -> Atom -> Maybe Atom -(Rational a) +? (Rational b) = Just $ Rational (a + b) -(Imaginary a) +? (Imaginary b) = Just $ Imaginary (a + b) -_ +? _ = Nothing - -infixl 6 -? -(-?) :: Atom -> Atom -> Maybe Atom -(Rational a) -? (Rational b) = Just $ Rational (a - b) -(Imaginary a) -? (Imaginary b) = Just $ Imaginary (a - b) -_ -? _ = Nothing - -infixl 7 *? -(*?) :: Atom -> Atom -> Maybe Atom -(Rational a) *? (Rational b) = Just $ Rational (a * b) -(Rational a) *? (Imaginary b) = Just $ Imaginary (a * b) -(Imaginary a) *? (Imaginary b) = (Imaginary (a * b)) ^? Rational 2 -_ *? _ = Nothing - -infixl 7 /? -(/?) :: Atom -> Atom -> Maybe Atom -_ /? (Rational 0) = Nothing -(Rational a) /? (Rational b) = Just $ Rational (a / b) -_ /? _ = Nothing - -infixl 7 %? -(%?) :: Atom -> Atom -> Maybe Atom -_ %? _ = Nothing - -infixr 8 ^? -(^?) :: Atom -> Atom -> Maybe Atom -(Rational a) ^? (Rational b) = Just $ Rational (a ** b) -(Imaginary a) ^? (Rational 0) = Just $ Rational a -(Imaginary a) ^? (Rational 1) = Just $ Imaginary a -(Imaginary a) ^? (Rational 2) = Just $ Rational (-a) -(Imaginary a) ^? (Rational 3) = Just $ Imaginary (-a) -(Imaginary a) ^? (Rational b) = Imaginary a ^? (Rational (b - 4)) -_ ^? _ = Nothing - -infixr 8 **? -(**?) :: Atom -> Atom -> Maybe Atom -_ **? _ = Nothing + deriving (Eq) instance Show Expr where show (EAtom a) = show a |
