No muy seguro de lo que quieres decir por invertible, o por qué lo quieres, lo que no parece necesario para su acumulador de definición. Así que, ignorando que por ahora ....
Cómo acerca de min, max ?
O contar ?
Si usted admite compuesto acumuladores adicionales con el estado, entonces usted puede tener un promedio (media), debido a que puede almacenar { count, media } y actualización:
count' = count + 1
mean' = (count*mean + n) / count'
o tal vez tienda { count, sum, media } donde
count' = count + 1
sum' = sum + n
mean' = sum' / count'
Parece que quieres un monoid: asociativa operador binario con una identidad.
El valor de identidad es el valor inicial de su acumulador.
La propiedad asociativa es decir, el orden de aplicación es irrelevante.
Para obtener más información, consulte Introducción a las Aves Meertens, el Formalismo, por Jeremy Gibbons.
En programación funcional, el problema es equivalente a encontrar la lista de homomorphisms, que son funciones de las listas (f) que puede ser expresado con un monoid (#) y la lista de operador de concatenación (++), tal que:
f (a ++ b) = (f a) # (f b)
es decir, la aplicación de una función a la lista completa se puede descomponer en la aplicación de la función a 2 sublistas y la combinación de los 2 resultados con un nuevo operador binario. El Tercer Homomorphism Teorema (ver otro trabajo de Gibbons) establece que si se pueden encontrar dos implementaciones para la función f, una acumulación de la izquierda (foldl) y una acumulación de la derecha (foldr), a continuación, usted puede encontrar el monoid operador y la función se puede calcular en cualquier orden, o en paralelo. Un excelente artículo sobre el tema es la Inversión Automática Genera Divide y Vencerás Programas Paralelos.
Mik