예제 #1
0
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)
예제 #2
0
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))
예제 #3
0
def quines():
    q = Var()
    for s in run(5, q, eval_expr(q, (), q)):
        print(format_sexpr(s))
예제 #4
0
def test_reify(goal, query, expected):
    assert repr(next(run(0, query, goal))) == expected
예제 #5
0
def test_run(goal, query, expected):
    assert next(run(0, query, goal)) == expected
예제 #6
0
def main():
    expr = ("/", ("+", 4, ("*", 2, ("-", 8, 5))), 2)
    out = Var()
    for s in run(0, out, calc(expr, out)):
        print(s)
예제 #7
0
def quines():
    q = Var()
    return next(run(0, q, eval_expr(q, (), q)))