Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. import Data.Map as Map
  2.  
  3. -- ZADANIA GRUPOWE
  4.  
  5. -- Rekurencyjna funkcja formatujca wy[wietlanie tablicy
  6. formatuj :: String -> String -> String
  7. formatuj [a] str = [a]
  8. formatuj (h:t) str = [h] ++ str ++ formatuj t str
  9.  
  10. -- Definicje predykatów
  11. data Zdanie = Z Char
  12. | N Zdanie
  13. | K Zdanie Zdanie
  14. | A Zdanie Zdanie
  15. | C Zdanie Zdanie
  16.  
  17. usun_duplikat :: (Eq a) => [a] -> [a]
  18. usun_duplikat [] = []
  19.  
  20. -- Usuwa rekurencyjnie duplikaty (takie same warto[ci obok siebie) z tablicy
  21. usun_duplikat (h:t) = if znajdz h t == True then usun_duplikat t else h : usun_duplikat t
  22.  
  23. znajdz :: (Eq a) => a -> [a] -> Bool
  24.  
  25. -- Cokolwiek w pustej tablicy
  26. znajdz _ [] = False
  27.  
  28. -- Szuka rekurencyjnie
  29. znajdz a (h:t) = if h == a then True else znajdz a t
  30.  
  31. -- Przeci|enie show w celu zmiany wy[wietlania
  32. instance Show Zdanie where
  33. show (Z a) = [a]
  34. show (N a) = show a
  35. show (A a b) = usun_duplikat( show a ++ show b)
  36. show (K a b) = usun_duplikat( show a ++ show b)
  37. show (C a b) = usun_duplikat( show a ++ show b)
  38.  
  39. -- ZADANIE 1
  40. drukuj :: Zdanie -> String
  41. drukuj (Z a) = [a]
  42. drukuj (N a) = "~" ++ drukuj a
  43. drukuj (A a b) = "(" ++ drukuj a ++ " | " ++ drukuj b ++ ")"
  44. drukuj (K a b) = "(" ++ drukuj a ++ " & " ++ drukuj b ++ ")"
  45. drukuj (C a b) = "(" ++ drukuj a ++ " => " ++ drukuj b ++ ")"
  46.  
  47. -- ZADANIE 2
  48. wypisz_zmienne :: Zdanie -> IO ()
  49. wypisz_zmienne a = putStrLn ( "[" ++ (formatuj (show a) ", " ) ++ "]" )
  50.  
  51. -- ZADANIE 3
  52. sprawdz :: Zdanie -> Map.Map Char Bool -> Bool
  53. sprawdz (Z x) map = Map.findWithDefault False x map
  54. sprawdz (N x) map = not(sprawdz x map)
  55. sprawdz (A x y) map = (sprawdz x map) || (sprawdz y map)
  56. sprawdz (K x y) map = (sprawdz x map) && (sprawdz y map)
  57. sprawdz (C x y) map = not(sprawdz x map) || (sprawdz y map)
  58.  
  59. -- PrzykBadowe dane
  60. przyklad = (C (N (Z 'p')) (A (K (Z 'p') (Z 'q')) (Z 'r')))
  61. mapa_wartosci = Map.fromList [('p', False), ('q', True), ('r', False)]
  62.  
  63. main = do
  64. print (drukuj przyklad)
  65. print (sprawdz przyklad mapa_wartosci)
  66. wypisz_zmienne przyklad
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement