Supongamos que tiene una lista de cosas de algún tipo. Ahora supongamos que desea ‘sumar’ todas esas cosas para obtener su suma. Necesitas dos cosas:
- Necesita una forma de tomar pares de cosas del tipo y ‘sumarlas’ para producir un total. Necesita saber qué significa ‘agregar’. Para los números, sumar podría significar ‘realmente’ sumar ‘o podría significar’ multiplicar ‘. Para cadenas probablemente significará concatenar. Para conjuntos puede ser unión o intersección, etc.
- En caso de que la lista esté vacía, necesita saber qué es ‘cero’ para la operación de agregar dada (es decir, cuál es el elemento de identidad para la operación). Para la multiplicación de números, eso sería 1. Para la concatenación de cadenas sería la cadena vacía (probablemente).
Si tiene esas dos cosas, puede resumir su lista.
Ahora, no quieres escribir el mismo código una y otra vez, ¿verdad? Una vez para resumir una lista de enteros. Una vez para concatenar una lista de cadenas. Una vez para multiplicar una lista de números. Una vez para sumar un montón de matrices, etc.
Entonces, lo que haces es definir una función ‘suma’ que toma una lista que contiene algunos elementos de un tipo, T, y también dices ‘esto es lo que haces para’ agregar ‘elementos por pares, y aquí está el valor para comenzar con (el cero).
- ¿Cómo es que [math] (x + 1) [/ math] es un factor del polinomio [math] (x ^ m + 1) [/ math] si [math] m [/ math] es impar?
- ¿Cuál es el número N tal que el máximo común divisor de 2472, 1284 y N sea 12, mientras que su mínimo común múltiplo es [matemática] 2 ^ 3 \ cdot3 ^ 2 \ cdot5 \ cdot103 \ cdot107 [/ matemática]?
- ¿Por qué la suma de 3 enteros impares consecutivos (n + (n + 2) + (n + 4)) tiene la misma fórmula que la suma de 3 enteros pares consecutivos (n + (n + 2) + (n + 4)), mientras que la suma de 3 enteros es (n + (n + 1) + (n + 2))?
- ¿Cuándo es más apropiado tomar la media aritmética versus la media geométrica versus la media armónica?
- ¿Cuáles son dos números naturales desiguales, A y B, de modo que (A + n) sea un factor de (B + n) para todos los valores de n de 0 a 10?
Si empaqueta esas dos cosas en algún tipo de estructura, tendrá un ‘agregar’ que toma dos parámetros de tipo T y devuelve un valor de tipo T, y también tendrá una definición del valor cero para esa operación. Este es un monoide
En realidad, para que sea un Monoide, la operación debe ser asociativa (de lo contrario, se llama Magma).
Por lo tanto, usaría un monoide siempre que desee un medio para definir una operación asociativa para un tipo y un cero para esa operación y tipo. Es probable que desee hacer esto para poder escribir algunas funciones genéricas que operan en estructuras y que deben ‘configurarse’ con algo que sepa las cosas que los monoides saben.