LeafAnswer docs and success checking methods
This commit is contained in:
@@ -14,15 +14,47 @@ use super::{HeapCellValue, Number};
|
|||||||
/// Represents a leaf answer from a query.
|
/// Represents a leaf answer from a query.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub enum LeafAnswer {
|
pub enum LeafAnswer {
|
||||||
|
/// A `true` leaf answer.
|
||||||
True,
|
True,
|
||||||
|
/// A `false` leaf answer.
|
||||||
|
///
|
||||||
|
/// This means that there are no more answers for the query.
|
||||||
False,
|
False,
|
||||||
|
/// An exception leaf answer.
|
||||||
Exception(PrologTerm),
|
Exception(PrologTerm),
|
||||||
|
/// A leaf answer with bindings and residual goals.
|
||||||
|
///
|
||||||
|
/// Both bindings and residual goals can be empty.
|
||||||
LeafAnswer {
|
LeafAnswer {
|
||||||
bindings: BTreeMap<String, PrologTerm>,
|
bindings: BTreeMap<String, PrologTerm>,
|
||||||
residual_goals: Vec<PrologTerm>,
|
residual_goals: Vec<PrologTerm>,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl LeafAnswer {
|
||||||
|
/// True if leaf answer failed.
|
||||||
|
///
|
||||||
|
/// This gives [`false`] for exceptions.
|
||||||
|
pub fn failed(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
LeafAnswer::False => true,
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// True if leaf answer may have succeeded.
|
||||||
|
///
|
||||||
|
/// When a leaf answer has residual goals the success is conditional on the satisfiability of
|
||||||
|
/// the contraints they represent. This gives [`false`] for exceptions.
|
||||||
|
pub fn maybe_succeeded(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
LeafAnswer::True => true,
|
||||||
|
LeafAnswer::LeafAnswer { .. } => true,
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Represents a Prolog term.
|
/// Represents a Prolog term.
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
|
|||||||
Reference in New Issue
Block a user