Advertisement
Guest User

Untitled

a guest
Dec 9th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. put "" str = ""
  2. put [s] str = [s]
  3. put (p:r) str = [p] ++ str ++ put r str
  4.  
  5. data Expression = Z Char | N Expression | K Expression Expression | A Expression Expression | C Expression Expression
  6.  
  7. find _ [] = False
  8. find z (p:r) = if p == z then True else find z r
  9.  
  10. deleteIfRepeat [] = []
  11. deleteIfRepeat (p:r) = if find p r then deleteIfRepeat r else  p : deleteIfRepeat r
  12.  
  13. instance Show Expression where
  14.   show (Z a) = [a]
  15.   show (N a) = show a
  16.   show (K a b) = deleteIfRepeat (show a ++ show b)
  17.   show (A a b) = deleteIfRepeat (show a ++ show b)
  18.   show (C a b) = deleteIfRepeat (show a ++ show b)
  19.  
  20. -- zależnie od typu wyrażenia jakie podamy jako input zwracany jest inny string wyjściowy
  21. drukuj (Z a) = [a]  -- zwracane jest to samo co zostało podane na wejście pod postacią Chara
  22. drukuj (N a) = "~" ++ drukuj a  -- zwracana jest wratość podana na wejście poprzedzona znakiem tylda "~"
  23. drukuj (K a b) = "(" ++ drukuj a ++ " & " ++ drukuj b ++ ")"  -- jako input podawane są dwie wartości i są one zamykane w nawias i rozdzielone znakiem "&"
  24. drukuj (A a b) = "(" ++ drukuj a ++ " | " ++ drukuj b ++ ")"  -- tak samo jak powyżej tylko, że są rozdzielane znakiem "|"
  25. drukuj (C a b) = "(" ++ drukuj a ++ " => " ++ drukuj a ++ ")" -- tak samo jak powyżej tylko są rozdzielane znakiem "=>"
  26.  
  27.  
  28. wypisz_zmienne a = putStrLn ("[" ++ (put (show a) ", " ) ++ "]")
  29.  
  30. -- przykładowe zapytania
  31. przyklad1 = (C (N (Z 'p')) (A (K (Z 'p') (Z 'q')) (Z 'r')))
  32.  
  33. main = do
  34.   print(drukuj przyklad1)
  35.   wypisz_zmienne przyklad1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement