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
'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,
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))