{-# LANGUAGE UnicodeSyntax #-} import Data.Functor ((<$>)) import System.Console.CmdTheLine import System.Log.Logger (Priority(..),rootLoggerName,setLevel,updateGlobalLogger) import LogicGrowsOnTrees.Examples.Queens (BoardSize(..),nqueensCorrectCount,nqueensCount) import LogicGrowsOnTrees.Parallel.Adapter.MPI (driver) import LogicGrowsOnTrees.Parallel.Main (TerminationReason(..),mainForExploreTree,runTerminationReason) import LogicGrowsOnTrees.Utils.WordSum (WordSum(..)) main = do -- updateGlobalLogger rootLoggerName (setLevel DEBUG) mainForExploreTree driver (getBoardSize <$> required (flip (pos 0) (posInfo { posName = "BOARD_SIZE" , posDoc = "board size" } ) Nothing)) (defTI { termDoc = "count the number of n-queens solutions for a given board size" }) (\n run_outcome → case runTerminationReason run_outcome of Aborted progress → error $ "Explorer aborted with progress " ++ show progress ++ "." Completed (WordSum number_of_solutions) | nqueensCorrectCount n == number_of_solutions → putStrLn $ "Correctly found all " ++ show number_of_solutions ++ " solutions for board size " ++ show n ++ "." | otherwise → error $ "Found " ++ show number_of_solutions ++ " instead of " ++ show (nqueensCorrectCount n) ++ " solutions for board size " ++ show n ++ "." Failure progress description → error $ "Explorer failed with progress " ++ show progress ++ " and reason " ++ show description ++ "." ) nqueensCount