Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- real world haskell
- -- learn haskell for greather good
- class Visible a where
- toString :: a -> String
- size :: a -> Int
- size x = length(toString x) -- pro vsechny typy
- instance Visible Char where
- toString c =[c]
- instance Visible Integer where
- toString x = (show x)
- printt :: Visible a => a -> IO()
- printt x= putStrLn (toString x)
- data Expr = Num Int --strom
- | Add Expr Expr
- | Sub Expr Expr
- | Mul Expr Expr
- | Div Expr Expr
- | Var Char
- deriving (Eq)
- expr1 :: Expr
- expr1 = Mul(Add (Num 1) (Num 2))(Num 3) --(1+2)*3
- ex2 :: Expr
- ex2 = Add (Num 1) (Num 2)
- evall :: Expr -> Int -- vyhodnoceni vyrazu Expr
- evall (Num a) =a
- evall (Add a b) =(evall a)+(evall b)
- evall (Sub a b) =(evall a)-(evall b)
- evall (Mul a b) =(evall a)*(evall b)
- evall (Div a b) =(evall a) `div` (evall b)
- showExpr1 :: Expr -> String-- doslovny vypis - nevypisuje zavorky kdyz jsou treba
- showExpr1 (Num a) = show a
- showExpr1 (Add a b) ="("++ (showExpr1 a) ++ "+" ++ (showExpr1 b) ++ ")"
- showExpr1 (Sub a b) ="("++ (showExpr1 a) ++ "-" ++ (showExpr1 b) ++ ")"
- showExpr1 (Mul a b) =(showExpr1 a) ++ "*" ++ (showExpr1 b)
- showExpr1 (Div a b) =(showExpr1 a) ++ "/" ++ (showExpr1 b)
- shExp :: Expr -> String
- shExp x = showExpr x False
- showExpr :: Expr -> Bool -> String-- pridat zavorky kdyz jen nutne
- showExpr (Num a) _ = show a
- showExpr (Add a b) True = "("++ (showExpr a False) ++ "+" ++ (showExpr b False) ++ ")"
- showExpr (Sub a b) True = "("++ (showExpr a False) ++ "-" ++ (showExpr b False) ++ ")"
- showExpr (Add a b) False= (showExpr a False) ++ "+" ++ (showExpr b False)
- showExpr (Sub a b) False = (showExpr a False) ++ "-" ++ (showExpr b False)
- showExpr (Mul a b) _ =(showExpr a True) ++ "*" ++ (showExpr b True)
- showExpr (Div a b) _ =(showExpr a True) ++ "/" ++ (showExpr b True)
- instance Show Expr where -- pridani do Show fce
- show a=shExp a
- deriv :: Expr -> Char -> Expr
- deriv (Num a) _ = Num 0
- deriv (Var a) y | a == y = Num 1
- | otherwise Num 0
- deriv (Add a b) y = (Add (deriv a y) (deriv b y))
- deriv (Sub a b) y = Sub (deriv a y) (deriv b y)
- deriv (Mul a b) y = Add (Mul (deriv a y) (b)) (Mul (a) (deriv b y))
- --deriv (Div a b) y =
- main::IO()
- main = do
- putStr "d"
- -- show (deriv expr1 'x')
- --DU regex -> Aut
- data ReggExpr = Val Char
- | Iter ReggExpr
- | Dot ReggExpr ReggExpr
- | Plus ReggExpr ReggExpr
- deriving (Eq)
- rel :: ReggExpr
- rel = Dot (Dot (Iter(Plus (Val 'a') (Val 'b'))) (Val 'a')) (Val 'b')
- data Symbol = Symbol Char
- | Epsilon
- -- projdi upravit pridat expsilon prechody
- -- spojit stavy + preznacit
- -- spojeni prechodu
- -- symboly spojit
- -- poc a koncove stavy
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement