예제 #1
0
파일: terms.py 프로젝트: pillmuncher/hornet
class Nil(Structure):

    __slots__ = ()

    def __init__(self):
        Structure.__init__(self, env={}, name='[]')

    __call__ = list
    __str__ = const('[]')
    __deepcopy__ = get_self

    fresh = get_self


NIL = Nil()
is_nil = rpartial(isinstance, Nil)


class PrefixOperator(Structure):

    __slots__ = ()

    operand = first_param

    def __call__(self):
        return self.op(self.operand.ref())

    def __str__(self):

        operand = self.operand.ref
예제 #2
0
    'unify',
] + system_names


globals().update((each, Name(each)) for each in system_names)


def unify(this, that, trail):
    this.ref.unify(that.ref, trail)


expand_term = bind_compose(rearrange, expand, build)
build_term = bind_compose(rearrange, build)


is_atomic = rpartial(isinstance, (Atom, String, Number))


ASSERTABLE = (
    Relation,
    Atom,
    List,
    Nil,
    Implication,
    Disjunction,
    Adjunction,
    Conditional,
    Addition,
    Subtraction,
    Multiplication,
    Division,
예제 #3
0
def promote(item):
    for T, F in _promotions:
        if isinstance(item, T):
            return F(item)


# Given any Python object 'item', return its AST (and create it if necessary):

def astify(item):
    return promote(item).node


def is_binop(node, op):
    return isinstance(node, ast.BinOp) and isinstance(node.op, op)


is_lshift = rpartial(is_binop, ast.LShift)
is_rshift = rpartial(is_binop, ast.RShift)
is_bitand = rpartial(is_binop, ast.BitAnd)
is_bitor = rpartial(is_binop, ast.BitOr)

is_name = rpartial(isinstance, ast.Name)
is_str = rpartial(isinstance, ast.Str)
is_call = rpartial(isinstance, ast.Call)
is_list = rpartial(isinstance, ast.List)
is_set = rpartial(isinstance, ast.Set)
is_tuple = rpartial(isinstance, ast.Tuple)
is_astwrapper = rpartial(isinstance, AstWrapper)
is_operator = rpartial(isinstance, (ast.BinOp, ast.UnaryOp))
is_terminal = rpartial(isinstance, (ast.Name, ast.Str))