#NEWLINE# def visit_structured( self , function , combinator ) : #NEWLINE# #INDENT# "\n        Recursively visit subexpressions.  Apply 'function' to each\n        subexpression and pass the result of each function application\n        to the 'combinator' for aggregation.  The combinator must have\n        the same signature as the constructor.  The function is not\n        applied to bound variables, but they are passed to the\n        combinator.\n        :param function: ``Function`` to call on each subexpression\n        :param combinator: ``Function`` with the same signature as the\n        constructor, to combine the results of the function calls\n        :return: result of combination\n        " #NEWLINE# return self . visit ( combinator , ( lambda parts : combinator ( * parts ) ) )