Cod sursa(job #2277443)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 6 noiembrie 2018 11:49:45
Problema Stramosi Scor 0
Compilator java Status done
Runda Arhiva de probleme Marime 1.2 kb
module Lab6 where
import Data.List(nub)
import Data.Maybe(fromJust)

data Fruct
    = Mar String Bool
    | Portocala String Int
ePortocalaDeSicilia :: Fruct -> Bool
ePortocalaDeSicilia (Portocala "Tarocco" x) = True
ePortocalaDeSicilia (Portocala "Moro" x) = True
ePortocalaDeSicilia (Portocala "Sanguinello" x) = True
ePortocalaDeSicilia (Portocala x y)= False
ePortocalaDeSicilia (Mar x y)= False

type Nume = String
data Prop
    = Var Nume
    | F
    | T
    | Not Prop
    | Prop :|: Prop
    | Prop :&: Prop
    deriving (Eq, Read)
infixr 2 :|:
infixr 3 :&:

p1 :: Prop
p1 = ((Var "p") :|: (Var "q")) :&: ((Var "p") :&: (Var "q"))

p2 :: Prop
p2 = ((Var "p") :|: (Var "q")) :&: (Not (Var "p") :&: Not (Var "q"))

p3 :: Prop
p3 = ((Var "p") :&: ((Var "q") :|: (Var "r"))):&:((Not (Var "p") :|: Not (Var "q")):&:(Not (Var "p") :|: Not (Var "q")))

instance Show Prop where
    show (Var x) = x
    show (x :&: y) = "("++show x ++"/\\" ++show y++")"
    show (x :|: y) = "("++show x ++"\\/" ++show y++")"
    show (Not x ) = "~" ++ show x

type Env = [(Nume, Bool)]

impureLookup :: Eq a => a -> [(a,b)] -> b
impureLookup a=fromJust . lookup a

eval :: Prop -> Env -> Bool