Function proto_vulcan::relation::diseqfd [−][src]
pub fn diseqfd<U, E, G>(u: LTerm<U, E>, v: LTerm<U, E>) -> InferredGoal<U, E, G> where
U: User,
E: Engine<U>,
G: AnyGoal<U, E>,
Expand description
Disequality relation for finite domains.
Note: The built-in syntax x != y
does not work with finite domains.
extern crate proto_vulcan;
use proto_vulcan::prelude::*;
use proto_vulcan::relation::diseqfd;
use proto_vulcan::relation::infd;
fn main() {
let query = proto_vulcan_query!(|q| {
|x, y| {
infd(x, &[1, 2]),
infd(y, &[2, 3]),
diseqfd(x, y),
q == [x, y],
}
});
let mut iter = query.run();
let mut expected = vec![lterm!([2, 3]), lterm!([1, 2]), lterm!([1, 3])];
iter.for_each(|x| {
let n = x.q.clone();
assert!(expected.contains(&n));
expected.retain(|y| &n != y);
});
assert_eq!(expected.len(), 0);
}