diff --git a/haskell-experiments/src/Datalog/NaiveQE.hs b/haskell-experiments/src/Datalog/NaiveQE.hs index 226be63..6192a9f 100644 --- a/haskell-experiments/src/Datalog/NaiveQE.hs +++ b/haskell-experiments/src/Datalog/NaiveQE.hs @@ -18,6 +18,9 @@ import Datalog.DatalogParser import Control.Exception import Data.Maybe import Utility.Utility +import Control.Monad(guard) +import Data.Set (Set) +import Data.Set qualified as Set data (DatalogDB db) => NaiveQE db = NaiveQE { @@ -64,7 +67,13 @@ computeHerbrand db = amalgamateRelationSub newFacts relation = foldr amalgamateRule newFacts (_rules relation) where amalgamateRule :: RelationRule -> NewFacts -> NewFacts - amalgamateRule (RelationRule headVars body) newFacts = - -- allMaps headVars (allConstants db) - newFacts + amalgamateRule (RelationRule headVars body) newFacts = + newFacts where + (facts, changed) = newFacts + knownTuples :: Set [Constant] = _tuples $ facts Map.! (_name relation) + extraTuples = do + varmap <- allMaps headVars (Set.toList $ allConstants db) + let tuple = (\name -> varmap Map.! name) <$> headVars + guard $ not $ Set.member tuple knownTuples + return varmap