def test_numeral(): e = get_engine(""" num(0). num(succ(X)) :- num(X). add(X, 0, X). add(X, succ(Y), Z) :- add(succ(X), Y, Z). mul(X, 0, 0). mul(X, succ(0), X). mul(X, succ(Y), Z) :- mul(X, Y, A), add(A, X, Z). factorial(0, succ(0)). factorial(succ(X), Y) :- factorial(X, Z), mul(Z, succ(X), Y). """) def nstr(n): if n == 0: return "0" return "succ(%s)" % nstr(n - 1) e.run(parse_query_term("num(0).")) e.run(parse_query_term("num(succ(0)).")) t, vars = get_query_and_vars("num(X).") e.run(t) assert vars['X'].dereference(e.heap).num == 0 e.run(parse_query_term("add(0, 0, 0).")) py.test.raises(UnificationFailed, e.run, parse_query_term(""" add(0, 0, succ(0)).""")) e.run(parse_query_term("add(succ(0), succ(0), succ(succ(0))).")) e.run(parse_query_term("mul(succ(0), 0, 0).")) e.run(parse_query_term("mul(succ(succ(0)), succ(0), succ(succ(0))).")) e.run(parse_query_term("mul(succ(succ(0)), succ(succ(0)), succ(succ(succ(succ(0))))).")) e.run(parse_query_term("factorial(0, succ(0)).")) e.run(parse_query_term("factorial(succ(0), succ(0)).")) e.run(parse_query_term("factorial(%s, %s)." % (nstr(5), nstr(120))))
def test_trivial(): e = get_engine(""" f(a). """) t, vars = get_query_and_vars("f(X).") e.run(t) assert vars['X'].dereference(e.heap).name == "a"
def test_trivial(): e = get_engine(""" f(a). """) t, vars = get_query_and_vars("f(X).") e.run(t) assert vars['X'].dereference(e.heap).name == "a"
def compile(self, source, filename="<input>", symbol="single"): try: if not source.strip(): return None, None return get_query_and_vars(source) except ParseError, exc: self.write(exc.nice_error_message("<stdin>", source) + "\n") raise SyntaxError
def compile(self, source, filename="<input>", symbol="single"): try: if not source.strip(): return None, None return get_query_and_vars(source) except ParseError, exc: self.write(exc.nice_error_message("<stdin>", source) + "\n") raise SyntaxError
def test_and(): e = get_engine(""" g(a, a). g(a, b). g(b, c). f(X, Z) :- g(X, Y), g(Y, Z). """) e.run(parse_query_term("f(a, c).")) t, vars = get_query_and_vars("f(X, c).") e.run(t) assert vars['X'].dereference(e.heap).name == "a"
def test_and(): e = get_engine(""" g(a, a). g(a, b). g(b, c). f(X, Z) :- g(X, Y), g(Y, Z). """) e.run(parse_query_term("f(a, c).")) t, vars = get_query_and_vars("f(X, c).") e.run(t) assert vars['X'].dereference(e.heap).name == "a"
def test_or_backtrack(): e = get_engine(""" a(a). b(b). g(a, b). g(a, a). f(X, Y, Z) :- (g(X, Z); g(X, Z); g(Z, Y)), a(Z). """) t, vars = get_query_and_vars("f(a, b, Z).") e.run(t) assert vars['Z'].dereference(e.heap).name == "a" f = collect_all(e, "X = 1; X = 2.") assert len(f) == 2
def test_or_backtrack(): e = get_engine(""" a(a). b(b). g(a, b). g(a, a). f(X, Y, Z) :- (g(X, Z); g(X, Z); g(Z, Y)), a(Z). """) t, vars = get_query_and_vars("f(a, b, Z).") e.run(t) assert vars['Z'].dereference(e.heap).name == "a" f = collect_all(e, "X = 1; X = 2.") assert len(f) == 2
def test_numeral(): e = get_engine(""" num(0). num(succ(X)) :- num(X). add(X, 0, X). add(X, succ(Y), Z) :- add(succ(X), Y, Z). mul(X, 0, 0). mul(X, succ(0), X). mul(X, succ(Y), Z) :- mul(X, Y, A), add(A, X, Z). factorial(0, succ(0)). factorial(succ(X), Y) :- factorial(X, Z), mul(Z, succ(X), Y). """) def nstr(n): if n == 0: return "0" return "succ(%s)" % nstr(n - 1) e.run(parse_query_term("num(0).")) e.run(parse_query_term("num(succ(0)).")) t, vars = get_query_and_vars("num(X).") e.run(t) assert vars['X'].dereference(e.heap).num == 0 e.run(parse_query_term("add(0, 0, 0).")) py.test.raises(UnificationFailed, e.run, parse_query_term(""" add(0, 0, succ(0)).""")) e.run(parse_query_term("add(succ(0), succ(0), succ(succ(0))).")) e.run(parse_query_term("mul(succ(0), 0, 0).")) e.run(parse_query_term("mul(succ(succ(0)), succ(0), succ(succ(0))).")) e.run( parse_query_term( "mul(succ(succ(0)), succ(succ(0)), succ(succ(succ(succ(0))))).")) e.run(parse_query_term("factorial(0, succ(0)).")) e.run(parse_query_term("factorial(succ(0), succ(0)).")) e.run(parse_query_term("factorial(%s, %s)." % (nstr(5), nstr(120))))