pub struct Frame { /* private fields */ }
Expand description
Context type for a prolog frame.
Examples
Discard a frame through dropping:
use swipl::prelude::*;
fn main() -> PrologResult<()> {
// create a context
let engine = Engine::new();
let activation = engine.activate();
let context: Context<_> = activation.into();
let term = context.new_term_ref();
{
let frame = context.open_frame();
term.unify(42_u64)?;
}
assert!(term.is_var());
Ok(())
}
Discard a frame explicitely:
use swipl::prelude::*;
fn main() -> PrologResult<()> {
// create a context
let engine = Engine::new();
let activation = engine.activate();
let context: Context<_> = activation.into();
let term = context.new_term_ref();
let frame = context.open_frame();
term.unify(42_u64)?;
frame.discard();
assert!(term.is_var());
Ok(())
}
Close a frame:
use swipl::prelude::*;
fn main() -> PrologResult<()> {
// create a context
let engine = Engine::new();
let activation = engine.activate();
let context: Context<_> = activation.into();
let term = context.new_term_ref();
let frame = context.open_frame();
term.unify(42_u64)?;
let term2 = frame.new_term_ref();
frame.close();
assert_eq!(42_u64, term.get()?);
// the following would result in a compile error:
// term2.unify(42_u64)?;
Ok(())
}
Rewind a frame:
use swipl::prelude::*;
fn main() -> PrologResult<()> {
// create a context
let engine = Engine::new();
let activation = engine.activate();
let context: Context<_> = activation.into();
let term = context.new_term_ref();
let frame = context.open_frame();
term.unify(42_u64)?;
let frame = frame.rewind();
// term is a variable again so the following unification will succeed
term.unify(43_u64)?;
frame.close();
assert_eq!(43_u64, term.get()?);
Ok(())
}
Trait Implementations§
impl ContextType for Frame
impl FrameableContextType for Frame
impl QueryableContextType for Frame
Auto Trait Implementations§
impl RefUnwindSafe for Frame
impl Send for Frame
impl Sync for Frame
impl Unpin for Frame
impl UnwindSafe for Frame
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more