def main(): env = list_to_tuples([ ("+", TMono(TFunc(TTerm("int"), TFunc(TTerm("int"), TTerm("int"))))), ("-", TMono(TFunc(TTerm("int"), TFunc(TTerm("int"), TTerm("int"))))), ("*", TMono(TFunc(TTerm("int"), TFunc(TTerm("int"), TTerm("int"))))), ("==", TMono(TFunc(TTerm("int"), TFunc(TTerm("int"), TTerm("bool"))))), ("bool", TMono(TFunc(TTerm("int"), TTerm("bool")))), ]) p = Rec( Sym("fac"), Abs( Sym("n"), If( App(App(Sym("=="), Sym("n")), 0), 1, App( App(Sym("*"), App(Sym("fac"), App(App(Sym("-"), Sym("n")), 1))), Sym("n"))))) t = Var() m = Var() print(p) for s in run(0, (t, m), infer(p, env, t, m)): print(s[0]) print(s[1]) t = TFunc(TTerm("int"), TTerm("bool")) m = Var() p = Var() for s in run(10, p, infer(p, env, t, m)): print(s)
def generate_fn(): q = Var() a = Symbol("a") env = Env(Symbol("cadr"), Closure(a, [car, [cdr, a]], ()), ()) p = conj(no_item(q, lambda a: isinstance(a, int)), eval_expr([q, [quote, [1, 2, 3]]], env, [1, 2])) for s in run(5, q, p): print(format_sexpr(s))
def quines(): q = Var() for s in run(5, q, eval_expr(q, (), q)): print(format_sexpr(s))
def test_reify(goal, query, expected): assert repr(next(run(0, query, goal))) == expected
def test_run(goal, query, expected): assert next(run(0, query, goal)) == expected
def main(): expr = ("/", ("+", 4, ("*", 2, ("-", 8, 5))), 2) out = Var() for s in run(0, out, calc(expr, out)): print(s)
def quines(): q = Var() return next(run(0, q, eval_expr(q, (), q)))