ascent 0.8.0

Logic programming in Rust
Documentation
//! Conditional `if` clause

use ascent::ascent;

ascent! {
    // Facts:

    relation number(isize);

    // Rules:

    relation fib(isize, isize);

    fib(0, 1) <-- number(0);
    fib(1, 1) <-- number(1);
    fib(x, y + z) <-- number(x), if *x >= 2, fib(x - 1, y), fib(x - 2, z);
}

fn main() {
   let mut prog = AscentProgram::default();

   prog.number = (0..6).map(|n| (n,)).collect();

   prog.run();

   let AscentProgram { mut fib, .. } = prog;

   fib.sort_by_key(|(key, _)| *key);

   assert_eq!(fib, vec![(0, 1), (1, 1), (2, 2), (3, 3), (4, 5), (5, 8),]);
}