':see: Expression.visit()'

def visit(self, function, combinator):

    if self.consequent:
        return combinator([function(self.first), function(self.second), function(self.consequent)])
    else:
        return combinator([function(self.first), function(self.second)])
