Advertisement
lu4kedr

cv5

Oct 16th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- real world haskell
  2. -- learn haskell for greather good
  3.  
  4.  
  5. class Visible a where
  6.     toString :: a -> String
  7.     size :: a -> Int
  8.     size x = length(toString x) -- pro vsechny typy
  9.  
  10. instance  Visible Char where
  11.     toString c =[c]
  12.  
  13. instance Visible Integer where
  14.     toString x = (show x)
  15.  
  16.  
  17. printt :: Visible a => a -> IO()
  18. printt x= putStrLn (toString x)
  19.  
  20.  
  21. data Expr = Num Int --strom
  22.             | Add Expr Expr
  23.             | Sub Expr Expr
  24.             | Mul Expr Expr
  25.             | Div Expr Expr
  26.             | Var Char
  27.             deriving (Eq)
  28.  
  29. expr1 :: Expr
  30. expr1 = Mul(Add (Num 1) (Num 2))(Num 3) --(1+2)*3
  31.  
  32. ex2 :: Expr
  33. ex2 = Add (Num 1) (Num 2)
  34.  
  35. evall :: Expr -> Int -- vyhodnoceni vyrazu Expr
  36. evall (Num a) =a
  37. evall (Add a b) =(evall a)+(evall b)
  38. evall (Sub a b) =(evall a)-(evall b)
  39. evall (Mul a b) =(evall a)*(evall b)
  40. evall (Div a b) =(evall a) `div` (evall b)
  41.  
  42. showExpr1 :: Expr -> String-- doslovny vypis - nevypisuje zavorky kdyz jsou treba
  43. showExpr1 (Num a) = show a
  44. showExpr1 (Add a b) ="("++ (showExpr1 a) ++ "+" ++ (showExpr1 b) ++ ")"
  45. showExpr1 (Sub a b) ="("++ (showExpr1 a) ++ "-" ++ (showExpr1 b) ++ ")"
  46. showExpr1 (Mul a b) =(showExpr1 a) ++ "*" ++ (showExpr1 b)
  47. showExpr1 (Div a b) =(showExpr1 a) ++ "/" ++ (showExpr1 b)
  48.  
  49. shExp :: Expr -> String
  50. shExp x = showExpr x False
  51.  
  52. showExpr :: Expr -> Bool -> String-- pridat zavorky kdyz jen nutne
  53. showExpr (Num a) _ = show a
  54. showExpr (Add a b) True = "("++ (showExpr a False) ++ "+" ++ (showExpr b False) ++ ")"
  55. showExpr (Sub a b) True = "("++ (showExpr a False) ++ "-" ++ (showExpr b False) ++ ")"
  56. showExpr (Add a b) False= (showExpr a False) ++ "+" ++ (showExpr b False)
  57. showExpr (Sub a b) False = (showExpr a False) ++ "-" ++ (showExpr b False)
  58. showExpr (Mul a b) _ =(showExpr a True) ++ "*" ++ (showExpr b True)
  59. showExpr (Div a b) _ =(showExpr a True) ++ "/" ++ (showExpr b True)
  60.  
  61. instance Show Expr where -- pridani do  Show fce
  62.     show a=shExp a
  63.  
  64. deriv :: Expr -> Char -> Expr
  65. deriv (Num a) _ = Num 0
  66. deriv (Var a) y | a == y = Num 1
  67.                 | otherwise Num 0
  68. deriv (Add a b) y = (Add (deriv a y) (deriv b y))
  69. deriv (Sub a b) y = Sub (deriv a y) (deriv b y)
  70. deriv (Mul a b) y = Add (Mul (deriv a y) (b)) (Mul (a) (deriv b y))
  71. --deriv (Div a b) y =
  72.  
  73.  
  74.  
  75. main::IO()
  76. main = do
  77.     putStr "d"
  78.     -- show (deriv expr1 'x')
  79.  
  80.  
  81. --DU regex -> Aut
  82. data ReggExpr   = Val Char
  83.                 | Iter ReggExpr
  84.                 | Dot ReggExpr ReggExpr
  85.                 | Plus ReggExpr ReggExpr
  86.                 deriving (Eq)
  87.  
  88. rel :: ReggExpr
  89. rel = Dot (Dot (Iter(Plus (Val 'a') (Val 'b'))) (Val 'a')) (Val 'b')
  90.  
  91. data Symbol = Symbol Char
  92.             | Epsilon
  93. -- projdi upravit pridat expsilon prechody
  94. -- spojit stavy + preznacit
  95. -- spojeni prechodu
  96. -- symboly spojit
  97. -- poc a koncove stavy
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement