cabal
only doing this because Data.Set is not in the stdlib
This commit is contained in:
parent
30941456a2
commit
dff5b9f365
19 changed files with 101 additions and 16 deletions
|
@ -1,30 +0,0 @@
|
|||
module Logic.Statement where
|
||||
|
||||
import Data.Set (singleton, union, toAscList)
|
||||
|
||||
data Statement
|
||||
= Atom String
|
||||
| Not Statement
|
||||
| And Statement Statement
|
||||
| Or Statement Statement
|
||||
| Implies Statement Statement
|
||||
| Iff Statement Statement
|
||||
deriving (Eq, Ord, Show)
|
||||
|
||||
atoms :: Statement -> [String]
|
||||
atoms = toAscList . mkSet
|
||||
where
|
||||
mkSet (Atom key) = singleton key
|
||||
mkSet (Not s) = mkSet s
|
||||
mkSet (And s1 s2) = union (mkSet s1) (mkSet s2)
|
||||
mkSet (Or s1 s2) = union (mkSet s1) (mkSet s2)
|
||||
mkSet (Implies s1 s2) = union (mkSet s1) (mkSet s2)
|
||||
mkSet (Iff s1 s2) = union (mkSet s1) (mkSet s2)
|
||||
|
||||
substatements :: Statement -> [Statement]
|
||||
substatements s@(Atom _) = [s]
|
||||
substatements s@(Not s1) = s:(substatements s1)
|
||||
substatements s@(And s1 s2) = (s:) $ substatements s1 ++ substatements s2
|
||||
substatements s@(Or s1 s2) = (s:) $ substatements s1 ++ substatements s2
|
||||
substatements s@(Implies s1 s2) = (s:) $ substatements s1 ++ substatements s2
|
||||
substatements s@(Iff s1 s2) = (s:) $ substatements s1 ++ substatements s2
|
Loading…
Add table
Add a link
Reference in a new issue