Skip to main content

LogicDb

Struct LogicDb 

Source
pub struct LogicDb { /* private fields */ }
Expand description

An indexed store of logic Clauses queried by goal.

Clauses are kept in assertion order and indexed by predicate symbol and by first ground argument to speed candidate lookup.

Implementations§

Source§

impl LogicDb

Source

pub fn new() -> Self

Creates an empty clause database.

§Examples
use sim_kernel::{Expr, Symbol};
use sim_lib_logic::LogicDb;

let mut db = LogicDb::new();
db.assert_clause_expr(Expr::List(vec![
    Expr::Symbol(Symbol::new("fact")),
    Expr::List(vec![
        Expr::Symbol(Symbol::new("parent")),
        Expr::Symbol(Symbol::new("alice")),
        Expr::Symbol(Symbol::new("bob")),
    ]),
]))
.unwrap();
assert!(db.predicate_exists(&Symbol::new("parent")));
assert_eq!(db.clauses().len(), 1);
Source

pub fn clauses(&self) -> &[Clause]

Returns all stored clauses in assertion order.

Source

pub fn predicate_exists(&self, predicate: &Symbol) -> bool

Returns whether any clause defines the given predicate symbol.

Source

pub fn assert_clause_expr(&mut self, expr: Expr) -> Result<ClauseId>

Parses a clause expression and asserts it, returning its new id.

Source

pub fn assert_clause(&mut self, clause: Clause) -> Result<ClauseId>

Adds a parsed clause to the database and updates the indexes.

Source

pub fn retract_clause_expr(&mut self, expr: &Expr) -> Result<bool>

Removes the first clause matching expr, rebuilding the indexes.

Returns whether a matching clause was found and removed.

Source

pub fn facts(&self, predicate: &Symbol) -> Vec<Expr>

Returns the surface expressions of every fact for the given predicate.

Source

pub fn clause_by_id(&self, id: ClauseId) -> Option<&Clause>

Looks up a clause by its identifier.

Source

pub fn clauses_for_goal( &self, goal: &Expr, indexing: bool, ) -> Result<Vec<&Clause>>

Returns the candidate clauses that could resolve goal.

When indexing is true the first-argument index is consulted before falling back to the predicate index.

Trait Implementations§

Source§

impl Clone for LogicDb

Source§

fn clone(&self) -> LogicDb

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LogicDb

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for LogicDb

Source§

fn default() -> LogicDb

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.