Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.List
- import Control.Monad
- import qualified Data.Map as Map
- main=do
- let tautologia = A (Z 'p') (N (Z 'p'))
- let zdanie = (C (N (Z 'p')) (A (K (Z 'p') (Z 'q')) (Z 'r')))
- let mapa = Map.fromList [('p', False), ('q', True), ('r', False)]
- -- 2.1
- print "drukuj"
- print $ drukuj zdanie
- -- 2.2
- print "wypisz_zmienne"
- wypisz_zmienne (zdanie)
- --2.3
- print "sprawdz"
- print $ sprawdz zdanie mapa
- data Zdanie = Z Char
- | Bool
- | N Zdanie
- | K Zdanie Zdanie
- | A Zdanie Zdanie
- | C Zdanie Zdanie
- ---------------------------------------
- --2.1
- drukuj :: Zdanie -> String
- drukuj (Z x) = [x]
- drukuj (N x) = "~"++(drukuj x)
- drukuj (C x y) = nawiasy ((drukuj x)++" => "++(drukuj y))
- drukuj (A x y) = nawiasy ((drukuj x)++" | " ++(drukuj y))
- drukuj (K x y) = nawiasy ((drukuj x)++" & " ++(drukuj y))
- nawiasy :: String -> String
- nawiasy (x) = "("++x++")"
- ---------------------------------------
- --2.2
- wypisz_zmienne::Zdanie->IO ()
- wypisz_zmienne z = putStrLn ( zmienne z "")
- zmienne::Zdanie->String->String
- zmienne (Z x) odp = dodaj (x) odp
- zmienne (N x) odp = zmienne (x) odp
- zmienne (K x y) odp = zmienne y (zmienne x odp)
- zmienne (A x y) odp = zmienne y (zmienne x odp)
- zmienne (C x y) odp = zmienne y (zmienne x odp)
- dodaj:: Char->String->String
- dodaj to tu
- | jest_w to tu = tu
- | otherwise = tu++[to]
- jest_w:: Char->String->Bool
- jest_w to tu
- | tu == [] = False
- | head (tu) == to = True
- | otherwise = jest_w to (tail(tu))
- ---------------------------------------------
- -- 3.
- -- Funkcja sprawdzajaca wartość zdania dla podanych parametrów
- sprawdz :: Zdanie -> Map.Map Char Bool -> Bool
- sprawdz (Z x) map = Map.findWithDefault False x map
- sprawdz (N x) map = not(sprawdz x map)
- sprawdz (K x y) map = (sprawdz x map) && (sprawdz y map)
- sprawdz (A x y) map = (sprawdz x map) || (sprawdz y map)
- sprawdz (C x y) map = not(sprawdz x map) || (sprawdz y map)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement