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);
}