Skip to content

Commit

Permalink
Rename Atom.predicate into Atom.predicate_symbol...
Browse files Browse the repository at this point in the history
... and add a helper method that returns an actual Predicate.
  • Loading branch information
teiesti committed Dec 8, 2023
1 parent 9058f9b commit f35b0ce
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 37 deletions.
24 changes: 12 additions & 12 deletions src/formatting/asp/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ impl Display for Format<'_, Predicate> {

impl Display for Format<'_, Atom> {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
let predicate = &self.0.predicate;
let predicate = &self.0.predicate_symbol;
let terms = &self.0.terms;

write!(f, "{predicate}")?;
Expand Down Expand Up @@ -351,7 +351,7 @@ mod tests {
fn format_atom() {
assert_eq!(
Format(&Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
})
.to_string(),
Expand All @@ -360,7 +360,7 @@ mod tests {

assert_eq!(
Format(&Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![Term::PrecomputedTerm(PrecomputedTerm::Numeral(1))],
})
.to_string(),
Expand All @@ -369,7 +369,7 @@ mod tests {

assert_eq!(
Format(&Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![
Term::PrecomputedTerm(PrecomputedTerm::Numeral(1)),
Term::PrecomputedTerm(PrecomputedTerm::Numeral(2))
Expand All @@ -393,7 +393,7 @@ mod tests {
Format(&Literal {
sign: Sign::Negation,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![]
}
})
Expand Down Expand Up @@ -431,7 +431,7 @@ mod tests {
Format(&AtomicFormula::Literal(Literal {
sign: Sign::DoubleNegation,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![]
}
}))
Expand All @@ -454,7 +454,7 @@ mod tests {
fn format_head() {
assert_eq!(
Format(&Head::Basic(Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![]
}))
.to_string(),
Expand All @@ -463,7 +463,7 @@ mod tests {

assert_eq!(
Format(&Head::Choice(Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![]
}))
.to_string(),
Expand All @@ -483,7 +483,7 @@ mod tests {
AtomicFormula::Literal(Literal {
sign: Sign::NoSign,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![Term::Variable(Variable("X".into()))]
}
}),
Expand Down Expand Up @@ -511,21 +511,21 @@ mod tests {
rules: vec![
Rule {
head: Head::Basic(Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![]
}),
body: Body { formulas: vec![] }
},
Rule {
head: Head::Basic(Atom {
predicate: "b".into(),
predicate_symbol: "b".into(),
terms: vec![]
}),
body: Body {
formulas: vec![AtomicFormula::Literal(Literal {
sign: Sign::Negation,
atom: Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![]
}
})]
Expand Down
47 changes: 25 additions & 22 deletions src/parsing/asp/pest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,10 @@ impl PestParser for AtomParser {
.into();
let terms: Vec<_> = pairs.map(TermParser::translate_pair).collect();

Atom { predicate, terms }
Atom {
predicate_symbol: predicate,
terms,
}
}
}

Expand Down Expand Up @@ -787,28 +790,28 @@ mod tests {
(
"p",
Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
),
(
"p()",
Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
),
(
"p(1)",
Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![Term::PrecomputedTerm(PrecomputedTerm::Numeral(1))],
},
),
(
"p(1, 2)",
Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![
Term::PrecomputedTerm(PrecomputedTerm::Numeral(1)),
Term::PrecomputedTerm(PrecomputedTerm::Numeral(2)),
Expand Down Expand Up @@ -838,7 +841,7 @@ mod tests {
Literal {
sign: Sign::NoSign,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
},
Expand All @@ -848,7 +851,7 @@ mod tests {
Literal {
sign: Sign::Negation,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
},
Expand All @@ -858,7 +861,7 @@ mod tests {
Literal {
sign: Sign::DoubleNegation,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
},
Expand All @@ -868,7 +871,7 @@ mod tests {
Literal {
sign: Sign::NoSign,
atom: Atom {
predicate: "notp".into(),
predicate_symbol: "notp".into(),
terms: vec![],
},
},
Expand Down Expand Up @@ -918,7 +921,7 @@ mod tests {
AtomicFormula::Literal(Literal {
sign: Sign::Negation,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
}),
Expand All @@ -932,14 +935,14 @@ mod tests {
(
"p",
Head::Basic(Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
}),
),
(
"{p}",
Head::Choice(Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
}),
),
Expand All @@ -957,7 +960,7 @@ mod tests {
formulas: vec![AtomicFormula::Literal(Literal {
sign: Sign::NoSign,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
})],
Expand All @@ -970,7 +973,7 @@ mod tests {
AtomicFormula::Literal(Literal {
sign: Sign::NoSign,
atom: Atom {
predicate: "p".into(),
predicate_symbol: "p".into(),
terms: vec![],
},
}),
Expand Down Expand Up @@ -1000,14 +1003,14 @@ mod tests {
"a :- b.",
Rule {
head: Head::Basic(Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![],
}),
body: Body {
formulas: vec![AtomicFormula::Literal(Literal {
sign: Sign::NoSign,
atom: Atom {
predicate: "b".into(),
predicate_symbol: "b".into(),
terms: vec![],
},
})],
Expand All @@ -1018,7 +1021,7 @@ mod tests {
"a :-.",
Rule {
head: Head::Basic(Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![],
}),
body: Body { formulas: vec![] },
Expand All @@ -1028,7 +1031,7 @@ mod tests {
"a.",
Rule {
head: Head::Basic(Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![],
}),
body: Body { formulas: vec![] },
Expand All @@ -1048,21 +1051,21 @@ mod tests {
rules: vec![
Rule {
head: Head::Basic(Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![],
}),
body: Body { formulas: vec![] },
},
Rule {
head: Head::Basic(Atom {
predicate: "b".into(),
predicate_symbol: "b".into(),
terms: vec![],
}),
body: Body {
formulas: vec![AtomicFormula::Literal(Literal {
sign: Sign::NoSign,
atom: Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![],
},
})],
Expand All @@ -1076,7 +1079,7 @@ mod tests {
Program {
rules: vec![Rule {
head: Head::Basic(Atom {
predicate: "a".into(),
predicate_symbol: "a".into(),
terms: vec![],
}),
body: Body { formulas: vec![] },
Expand Down
13 changes: 10 additions & 3 deletions src/syntax_tree/asp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,20 @@ impl_node!(Predicate, Format, PredicateParser);

#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub struct Atom {
pub predicate: String,
pub predicate_symbol: String,
pub terms: Vec<Term>,
}

impl_node!(Atom, Format, AtomParser);

impl Atom {
pub fn predicate(&self) -> Predicate {
Predicate {
symbol: self.predicate_symbol.clone(),
arity: self.terms.len(),
}
}

pub fn variables(&self) -> HashSet<Variable> {
let mut vars = HashSet::new();
for term in self.terms.iter() {
Expand Down Expand Up @@ -185,8 +192,8 @@ impl_node!(Head, Format, HeadParser);
impl Head {
pub fn predicate(&self) -> Option<&str> {
match self {
Head::Basic(a) => Some(&a.predicate),
Head::Choice(a) => Some(&a.predicate),
Head::Basic(a) => Some(&a.predicate_symbol),
Head::Choice(a) => Some(&a.predicate_symbol),
Head::Falsity => None,
}
}
Expand Down

0 comments on commit f35b0ce

Please sign in to comment.