def stdtypes(db): for subst in db.ask(equal(10, X) & equal(X, 10)): print(sorted(subst.items())) for subst in db.ask(equal('hallo', X) & equal(X, 'hallo')): print(sorted(subst.items())) for subst in db.ask(equal([], X) & equal(X, [])): print(sorted(subst.items())) for subst in db.ask(equal([1], X) & equal(X, [1])): print(sorted(subst.items())) for subst in db.ask(equal([1 | promote(2)], X) & equal(X, [promote(1) | 2])): print(sorted(subst.items())) for subst in db.ask(equal([1, 2], X) & equal(X, [1, 2])): print(sorted(subst.items())) for subst in db.ask(equal([1, promote(2) | 3], X) & equal(X, [1, 2 | promote(3)])): print(sorted(subst.items())) for subst in db.ask(equal([1, promote(2), 3], X) & equal(X, [1, 2 | promote(3)])): print('Yes.') break else: print('No.') print()
def _join_3(term, env, db, trail): unify(env.S, build_term(promote(env.T().join(flatten_strs(env.L)))), trail)
def _let(term, env, db, trail): unify(env.X, build_term(promote(env.Y())), trail)
def test_dcg_transformation(): from hornet.expressions import promote, mcompose from hornet.operators import rearrange from hornet.dcg import expand, _C_ from hornet.symbols import s, np, vp, _0, _1, _2, _3, _4, _5, _6, _7, _8 from hornet.symbols import it_is, tell, me, it, aint, so, very, different from hornet.symbols import a, b, c, u, v, X ast_test_all( ast_eq, mcompose(rearrange, expand), rearrange, ( s >> vp, s(_0, _1) << vp(_0, _1), ), ( s >> np & vp, s(_0, _2) << np(_0, _1) & vp(_1, _2), ), ( s >> np(a) & vp(a, b), s(_0, _2) << np(a, _0, _1) & vp(a, b, _1, _2), ), ( s >> a & b & c, s(_0, _3) << a(_0, _1) & b(_1, _2) & c(_2, _3), ), ( it_is(X) >> [] & [], it_is(X, _0, _0), ), ( it_is(X) >> [], it_is(X, _0, _0), ), ( it_is(X) >> [] & so, it_is(X, _0, _1) << so(_0, _1), ), ( it_is(X) >> so & [], it_is(X, _0, _1) << so(_0, _1), ), ( it_is(X) >> [] & so & [], it_is(X, _0, _1) << so(_0, _1), ), ( it_is(X) >> tell & [] & so, it_is(X, _0, _2) << tell(_0, _1) & so(_1, _2), ), ( it_is(X) >> [tell], it_is(X, _0, _1) << _C_(_0, tell, _1), ), ( it_is(X) >> [tell, me], it_is(X, _0, _2) << _C_(_0, tell, _1) & _C_(_1, me, _2), ), ( it_is(X) >> [tell, me, it], it_is(X, _0, _3) << _C_(_0, tell, _1) & _C_(_1, me, _2) & _C_(_2, it, _3), ), ( it_is(X) >> [tell, me, it, aint], it_is(X, _0, _4) << _C_(_0, tell, _1) & _C_(_1, me, _2) & _C_(_2, it, _3) & _C_(_3, aint, _4), ), ( it_is(X) >> [tell, me, it, aint, so], it_is(X, _0, _5) << _C_(_0, tell, _1) & _C_(_1, me, _2) & _C_(_2, it, _3) & _C_(_3, aint, _4) & _C_(_4, so, _5), ), ( (it_is(X) & [c, tell, me, it]) >> [aint, so, a, b], it_is(X, _0, _8) << _C_(_0, aint, _1) & _C_(_1, so, _2) & _C_(_2, a, _3) & _C_(_3, b, _4) & _C_(_8, c, _7) & _C_(_7, tell, _6) & _C_(_6, me, _5) & _C_(_5, it, _4), ), ( (it_is(X) & [tell, me]) >> [very, different], it_is(X, _0, _4) << _C_(_0, very, _1) & _C_(_1, different, _2) & _C_(_4, tell, _3) & _C_(_3, me, _2), ), ( it_is(X) & [me] >> it & [very] & so, it_is(X, _0, _4) << it(_0, _1) & _C_(_1, very, _2) & so(_2, _3) & _C_(_4, me, _3), ), ( it_is(X) & [me] >> it & [very] & so & [different], it_is(X, _0, _5) << it(_0, _1) & _C_(_1, very, _2) & so(_2, _3) & _C_(_3, different, _4) & _C_(_5, me, _4), ), ( it_is(X) & [me] >> promote([it]) & [very] & [tell] & [different] & so, it_is(X, _0, _6) << _C_(_0, it, _1) & _C_(_1, very, _2) & _C_(_2, tell, _3) & _C_(_3, different, _4) & so(_4, _5) & _C_(_6, me, _5), ), ( it_is(X) & [me] >> it & [very, tell] & so & [different], it_is(X, _0, _6) << it(_0, _1) & _C_(_1, very, _2) & _C_(_2, tell, _3) & so(_3, _4) & _C_(_4, different, _5) & _C_(_6, me, _5), ), ( it_is(X) >> {tell(X)} & me, it_is(X, _0, _1) << tell(X) & me(_0, _1), ), )
def visit_Num(self, node): if node.n >= 0: self.append(node) else: self.visit((-promote(-node.n)).node)