pub struct All { /* private fields */ }
Expand description
A Goal
that only succeeds if all sub-goals succeed.
See the all!
macro for a more ergonomic way to construct static All
goals.
Also implements From<Vec<Box<dyn Goal>>>
and FromIterator<Box<dyn Goal>>
.
Example
use canrun::{unify, LVar, Query};
use canrun::goals::{Goal, All};
let x = LVar::new();
let y = LVar::new();
let goals: Vec<Box<dyn Goal>> = vec![
Box::new(unify(y, x)),
Box::new(unify(1, x)),
Box::new(unify(y, 1)),
];
let goal = All::from(goals);
let result: Vec<_> = goal.query((x, y)).collect();
assert_eq!(result, vec![(1, 1)])