extracting variable names in a rule
This commit is contained in:
parent
4b358a8d6f
commit
429d64ee73
@ -17,6 +17,7 @@ import Data.Text (Text)
|
||||
import Data.Void
|
||||
import Datalog.DatalogParser (Head (HeadSingle), Literal (..), Statement (..), Term (..), parseDatalog)
|
||||
import Text.Megaparsec (ParseErrorBundle)
|
||||
import GHC.TypeError (ErrorMessage(Text))
|
||||
|
||||
data Value
|
||||
= ValueInt Int
|
||||
@ -104,8 +105,8 @@ data BodyConstraint = BodyConstraint
|
||||
|
||||
data RuleContext = RuleContext
|
||||
{ __relation :: Relation
|
||||
, -- _variableNames :: [Text],
|
||||
_headEntries :: [RuleElement]
|
||||
, _variableNames :: [Text]
|
||||
, _headEntries :: [RuleElement]
|
||||
, _bodyConstraints :: [BodyConstraint]
|
||||
, _db :: NaiveDatabase
|
||||
}
|
||||
@ -128,6 +129,7 @@ withFactsAndRules facts =
|
||||
digestHead db relation (Literal neg relationName terms) =
|
||||
RuleContext
|
||||
{ __relation = relation
|
||||
, _variableNames = extractVariableNames terms
|
||||
, _headEntries = variables'
|
||||
, _bodyConstraints = []
|
||||
, _db = NaiveDatabase relationMap' constants'
|
||||
@ -143,6 +145,7 @@ withFactsAndRules facts =
|
||||
digestBody context (Literal neg subRelationName terms) =
|
||||
RuleContext
|
||||
{ __relation = relation
|
||||
, _variableNames = _variableNames context
|
||||
, _headEntries = variables'
|
||||
, _bodyConstraints = constraints'
|
||||
, _db = NaiveDatabase relationMap' constants'
|
||||
@ -211,6 +214,11 @@ withFactsAndRules facts =
|
||||
toElement :: Term -> RuleElement
|
||||
toElement (Var name) = RuleElementVariable name
|
||||
toElement constant = RuleElementConstant constant
|
||||
extractVariableNames :: [Term] -> [Text]
|
||||
extractVariableNames = mapMaybe extractVariableName where
|
||||
extractVariableName :: Term -> Maybe Text
|
||||
extractVariableName (Var name) = Just name
|
||||
extractVariableName _ = Nothing
|
||||
|
||||
query :: NaiveDatabase -> Text -> Text
|
||||
query db qText =
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user