From 9a4cf15fc0e724e6bc93c6530b47ca45836da5ba Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 16 Mar 2020 16:27:39 +0100 Subject: variable and function context between prompts --- src/Expr.hs | 62 ++----------------------------------------------------------- 1 file changed, 2 insertions(+), 60 deletions(-) (limited to 'src/Expr.hs') 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 -- cgit