[−][src]Function canrun::goals::project::project_2
pub fn project_2<'a, A, AV, B, BV, D, F>(a: AV, b: BV, func: F) -> Goal<'a, D> where
A: Debug + 'a,
AV: IntoVal<A>,
B: Debug + 'a,
BV: IntoVal<B>,
D: DomainType<'a, A> + DomainType<'a, B>,
F: Fn(Rc<A>, Rc<B>) -> Goal<'a, D> + 'a,
Create a projection goal that allows creating a new goal based on the resolved values.
use canrun::{Goal, all, unify, var, project_2}; use canrun::example::I32; let (x, y) = (var(), var()); let goal: Goal<I32> = all![ unify(1, x), unify(2, y), project_2(x, y, |x, y| if x < y { Goal::succeed() } else { Goal::fail() }), ]; let result: Vec<_> = goal.query((x, y)).collect(); assert_eq!(result, vec![(1, 2)])