Ejemplo n.º 1
0
def _neg_to_pygp(negation: Not, var_store=None):
    if var_store is None:
        var_store = {}
    inner = _lit_to_pygp(negation.get_atom(), var_store)

    ng_f = pygprolog.pygp_Find_Atom("\\+")
    return pygprolog.pygp_Mk_Compound(ng_f, 1, [inner])
Ejemplo n.º 2
0
def _lit_to_pygp(literal: Atom, var_store=None):
    if var_store is None:
        var_store = {}
    pred = pygprolog.pygp_Find_Atom(literal.get_predicate().get_name())
    if pred < 0:
        pred = pygprolog.pygp_Create_Allocate_Atom(literal.get_predicate().get_name())
    args = [_to_pygp(x, var_store) for x in literal.get_arguments()]

    return pygprolog.pygp_Mk_Compound(pred, literal.get_predicate().get_arity(), args)
Ejemplo n.º 3
0
def _pair_to_pygp(p: Pair, lit_var_store: Dict[Variable, int]):
    left = _to_pygp(p.get_left(), lit_var_store)
    right = _to_pygp(p.get_right(), lit_var_store)

    functor = pygprolog.pygp_Find_Atom('.')
    if functor < 0:
        functor = pygprolog.pygp_Create_Allocate_Atom('.')

    args = [left, right]
    return pygprolog.pygp_Mk_Compound(functor, 2, args)
Ejemplo n.º 4
0
def _cl_to_pygp(clause: Clause):
    var_store = {}
    head_pygp = _lit_to_pygp(clause.get_head(), var_store)
    body_pygp = [
        _lit_to_pygp(x, var_store) if isinstance(x, Atom) else _neg_to_pygp(x, var_store)
        for x in clause.get_body().get_literals()
    ]
    # conj_f = pygprolog.pygp_Find_Atom(",")
    # body_pygp = reduce(lambda x, y: pygprolog.pygp_Mk_Compound(conj_f, 2, [x, y]), body_pygp)
    body_pygp = _conjoin_lits(body_pygp)
    cl_f = pygprolog.pygp_Find_Atom(":-")

    return pygprolog.pygp_Mk_Compound(cl_f, 2, [head_pygp, body_pygp])
Ejemplo n.º 5
0
def _conjoin_lits(pyg_literals):
    conj_f = pygprolog.pygp_Find_Atom(",")
    return reduce(lambda x, y: pygprolog.pygp_Mk_Compound(conj_f, 2, [x, y]), pyg_literals)
Ejemplo n.º 6
0
def _structure_to_pygp(struct: Structure, lit_var_store: Dict[Variable, int]):
    func = _functor_to_pygp(struct.get_functor())
    args = [_to_pygp(x, lit_var_store) for x in struct.get_arguments()]

    return pygprolog.pygp_Mk_Compound(func, struct.get_functor().get_arity(), args)