Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import qualified Data.Map as Map
- put "" str = ""
- put [s] str = [s]
- put (p:r) str = [p] ++ str ++ put r str
- data Expression = Z Char | N Expression | K Expression Expression | A Expression Expression | C Expression Expression
- find _ [] = False
- find z (p:r) = if p == z then True else find z r
- deleteIfRepeat [] = []
- deleteIfRepeat (p:r) = if find p r then deleteIfRepeat r else p : deleteIfRepeat r
- instance Show Expression where
- show (Z a) = [a]
- show (N a) = show a
- show (K a b) = deleteIfRepeat (show a ++ show b)
- show (A a b) = deleteIfRepeat (show a ++ show b)
- show (C a b) = deleteIfRepeat (show a ++ show b)
- -- zależnie od typu wyrażenia jakie podamy jako input zwracany jest inny string wyjściowy
- drukuj (Z a) = [a] -- zwracane jest to samo co zostało podane na wejście pod postacią Chara
- drukuj (N a) = "~" ++ drukuj a -- zwracana jest wratość podana na wejście poprzedzona znakiem tylda "~"
- drukuj (K a b) = "(" ++ drukuj a ++ " & " ++ drukuj b ++ ")" -- jako input podawane są dwie wartości i są one zamykane w nawias i rozdzielone znakiem "&"
- drukuj (A a b) = "(" ++ drukuj a ++ " | " ++ drukuj b ++ ")" -- tak samo jak powyżej tylko, że są rozdzielane znakiem "|"
- drukuj (C a b) = "(" ++ drukuj a ++ " => " ++ drukuj a ++ ")" -- tak samo jak powyżej tylko są rozdzielane znakiem "=>"
- wypisz_zmienne a = putStrLn ("[" ++ (put (show a) ", " ) ++ "]") --miedzy znaki wstawia ", "
- -- map sprawdza w 'mapie' wartosc logiczna danej zmiennej i ja zwraca
- sprawdz :: Expression -> Map.Map Char Bool -> Bool -- sprawdza wartosc logiczna zdania
- 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)
- -- przykładowe zapytania
- przyklad1 = (C (N (Z 'p')) (A (K (Z 'p') (Z 'q')) (Z 'r')))
- mapawartosci = Map.fromList [('p', False), ('q', True), ('r', False)]
- main = do
- print(drukuj przyklad1)
- wypisz_zmienne przyklad1
- print(sprawdz przyklad1 mapawartosci )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement