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 Data.Void
|
||||||
import Datalog.DatalogParser (Head (HeadSingle), Literal (..), Statement (..), Term (..), parseDatalog)
|
import Datalog.DatalogParser (Head (HeadSingle), Literal (..), Statement (..), Term (..), parseDatalog)
|
||||||
import Text.Megaparsec (ParseErrorBundle)
|
import Text.Megaparsec (ParseErrorBundle)
|
||||||
|
import GHC.TypeError (ErrorMessage(Text))
|
||||||
|
|
||||||
data Value
|
data Value
|
||||||
= ValueInt Int
|
= ValueInt Int
|
||||||
@ -104,8 +105,8 @@ data BodyConstraint = BodyConstraint
|
|||||||
|
|
||||||
data RuleContext = RuleContext
|
data RuleContext = RuleContext
|
||||||
{ __relation :: Relation
|
{ __relation :: Relation
|
||||||
, -- _variableNames :: [Text],
|
, _variableNames :: [Text]
|
||||||
_headEntries :: [RuleElement]
|
, _headEntries :: [RuleElement]
|
||||||
, _bodyConstraints :: [BodyConstraint]
|
, _bodyConstraints :: [BodyConstraint]
|
||||||
, _db :: NaiveDatabase
|
, _db :: NaiveDatabase
|
||||||
}
|
}
|
||||||
@ -128,6 +129,7 @@ withFactsAndRules facts =
|
|||||||
digestHead db relation (Literal neg relationName terms) =
|
digestHead db relation (Literal neg relationName terms) =
|
||||||
RuleContext
|
RuleContext
|
||||||
{ __relation = relation
|
{ __relation = relation
|
||||||
|
, _variableNames = extractVariableNames terms
|
||||||
, _headEntries = variables'
|
, _headEntries = variables'
|
||||||
, _bodyConstraints = []
|
, _bodyConstraints = []
|
||||||
, _db = NaiveDatabase relationMap' constants'
|
, _db = NaiveDatabase relationMap' constants'
|
||||||
@ -143,6 +145,7 @@ withFactsAndRules facts =
|
|||||||
digestBody context (Literal neg subRelationName terms) =
|
digestBody context (Literal neg subRelationName terms) =
|
||||||
RuleContext
|
RuleContext
|
||||||
{ __relation = relation
|
{ __relation = relation
|
||||||
|
, _variableNames = _variableNames context
|
||||||
, _headEntries = variables'
|
, _headEntries = variables'
|
||||||
, _bodyConstraints = constraints'
|
, _bodyConstraints = constraints'
|
||||||
, _db = NaiveDatabase relationMap' constants'
|
, _db = NaiveDatabase relationMap' constants'
|
||||||
@ -211,6 +214,11 @@ withFactsAndRules facts =
|
|||||||
toElement :: Term -> RuleElement
|
toElement :: Term -> RuleElement
|
||||||
toElement (Var name) = RuleElementVariable name
|
toElement (Var name) = RuleElementVariable name
|
||||||
toElement constant = RuleElementConstant constant
|
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 :: NaiveDatabase -> Text -> Text
|
||||||
query db qText =
|
query db qText =
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user