clingo-0.2.0.0: examples/Backend.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import Control.Monad.IO.Class
import Clingo.Control
import Clingo.Symbol
import Clingo.Solving
import Clingo.Model
import Clingo.ProgramBuilding
import Clingo.Inspection.Symbolic
import Text.Printf
import qualified Data.Text.IO as T
printModel :: (MonadIO (m s), MonadModel m) => Model s -> m s ()
printModel m = do
syms <- map prettySymbol
<$> modelSymbols m (selectNone { selectShown = True })
liftIO (putStr "Model: " >> print syms)
main :: IO ()
main = withDefaultClingo $ do
addProgram "base" [] "{a; b; c}."
ground [Part "base" []] Nothing
atoms <- flip fromSymbolicAtoms (map literal) =<< symbolicAtoms
backend >>= \b -> do
atomD <- atom b
addGroundStatements b
[ rule False [atomD] (take 2 atoms)
, rule False []
[ negateAspifLiteral (atomAspifLiteral atomD)
, atoms !! 2]
]
withSolver [] (allModels >=> mapM_ printModel)