asdi 0.2.5

Another Simplistic Datalog Implementation (in Rust)
Documentation
#[cfg(feature = "parser")]
use asdi::parse::parse_str;

#[cfg(feature = "parser")]
#[test]
fn test_wikipedia_example() {
    let program = parse_str(
        r#"parent(xerces, brooke).
parent(brooke, damocles).

ancestor(X, Y) ⟵ parent(X, Y).
ancestor(X, Y) ⟵ parent(X, Z) ∧ parent(Z, Y).

?- ancestor(xerces, X).
"#,
    );
    assert!(program.is_ok());
}

#[cfg(feature = "parser")]
#[test]
fn test_sourceforge_example() {
    let program = parse_str(
        r#"edge(a, b).
edge(b, c).
edge(c, d).
edge(d, a).

path(X, Y) :- edge(X, Y).
path(X, Y) :- edge(X, Z), path(Z, Y).

?- path(X, Y).
"#,
    );
    assert!(program.is_ok());
}

#[cfg(feature = "parser")]
#[test]
fn test_that_syllogism() {
    let program = parse_str(
        r#"human("Socrates").

mortal(X) <- human(X).

?- mortal("Socrates").
"#,
    );
    assert!(program.is_ok());
}