Advertisement
Guest User

Has

a guest
Dec 16th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     import Data.List
  2.     import Control.Monad
  3.     import qualified Data.Map as Map
  4.      
  5.     main=do
  6.         let tautologia = A (Z 'p') (N (Z 'p'))
  7.         let zdanie = (C (N (Z 'p')) (A (K (Z 'p') (Z 'q')) (Z 'r')))
  8.         let mapa = Map.fromList [('p', False), ('q', True), ('r', False)]
  9.         -- 2.1
  10.         print "drukuj"
  11.         print $ drukuj zdanie
  12.         -- 2.2
  13.         print "wypisz_zmienne"
  14.         wypisz_zmienne (zdanie)
  15.         --2.3
  16.         print "sprawdz"
  17.         print $ sprawdz zdanie mapa
  18.  
  19.      
  20.     data Zdanie = Z Char
  21.                     | Bool
  22.                     | N Zdanie
  23.                     | K Zdanie Zdanie
  24.                     | A Zdanie Zdanie
  25.                     | C Zdanie Zdanie
  26.      
  27.     ---------------------------------------
  28.     --2.1
  29.     drukuj :: Zdanie -> String
  30.     drukuj (Z x)   = [x]
  31.     drukuj (N x)   = "~"++(drukuj x)
  32.     drukuj (C x y) = nawiasy ((drukuj x)++" => "++(drukuj y))
  33.     drukuj (A x y) = nawiasy ((drukuj x)++" | " ++(drukuj y))
  34.     drukuj (K x y) = nawiasy ((drukuj x)++" & " ++(drukuj y))
  35.    
  36.     nawiasy :: String -> String
  37.     nawiasy (x) = "("++x++")"
  38.      
  39.     ---------------------------------------
  40.     --2.2
  41.      
  42.     wypisz_zmienne::Zdanie->IO ()
  43.     wypisz_zmienne z =  putStrLn ( zmienne z "")
  44.      
  45.     zmienne::Zdanie->String->String
  46.     zmienne (Z x) odp = dodaj (x) odp
  47.     zmienne (N x) odp = zmienne (x) odp
  48.     zmienne (K x y) odp = zmienne y (zmienne x odp)
  49.     zmienne (A x y) odp = zmienne y (zmienne x odp)
  50.     zmienne (C x y) odp = zmienne y (zmienne x odp)
  51.    
  52.     dodaj:: Char->String->String
  53.     dodaj to tu
  54.      | jest_w to tu = tu
  55.      | otherwise = tu++[to]
  56.      
  57.     jest_w:: Char->String->Bool
  58.     jest_w to tu
  59.      | tu == [] = False
  60.      | head (tu) == to = True
  61.      | otherwise = jest_w to (tail(tu))  
  62.      
  63.      ---------------------------------------------
  64.     -- 3.
  65.     -- Funkcja sprawdzajaca wartość zdania dla podanych parametrów
  66.     sprawdz :: Zdanie -> Map.Map Char Bool -> Bool
  67.     sprawdz (Z x) map = Map.findWithDefault False x map
  68.     sprawdz (N x) map = not(sprawdz x map)
  69.     sprawdz (K x y) map = (sprawdz x map) && (sprawdz y map)
  70.     sprawdz (A x y) map = (sprawdz x map) || (sprawdz y map)
  71.     sprawdz (C x y) map = not(sprawdz x map) || (sprawdz y map)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement