MapReduce: ¿Cómo se usan los monoides en la programación práctica?

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:

  1. 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.
  2. 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).

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.

More Interesting

Cómo encontrar el mínimo común múltiplo entre estos: [matemáticas] (x + a) (xa), x (xa), x (x + a) [/ matemáticas]

Cómo encontrar el número de soluciones para [matemáticas] x + y + z = 30 [/ matemáticas] si todas son números enteros no negativos, tome valores distintos y exactamente una variable tenga un valor menor o igual que 3

¿Qué es una explicación intuitiva del signo de una permutación?

¿Cuál es una explicación simple de la palabra ‘abstracto’ y cómo se relaciona con el álgebra?

¿Cuál es la ecuación de la línea que pasa por [matemática] (2, -2) [/ matemática] y el punto de intersección de [matemática] 2x + 3y -5 = 0 [/ matemática] y [matemática] 7x -5y -2 = 0 [/ matemáticas]?

Cálculo: [matemáticas] \ frac {d ^ 4 y} {dx ^ 4} = a [/ matemáticas], dado que [matemáticas] y = \ frac {d ^ 2y} {dx ^ 2} = 0 [/ matemáticas] en [matemáticas] x = 0 [/ matemáticas] y [matemáticas] x = 1 [/ matemáticas]. ¿Qué es [matemáticas] f (x) [/ matemáticas]?

Si 1 = simple, 2 = doble, 3 = triple, 4 = cuádruple, ¿cómo se llaman 5, 6, 7, 8, etc.?

Cómo simplificar [matemáticas] 4x ^ 2-4x [/ matemáticas]

Cómo calcular la integral lineal [math] \ oint _ {\ gamma} (x + y + z) \, \ mathrm {d} s [/ math], donde [math] \ gamma [/ math] es el cuadrado cuyos vértices son [matemáticas] (1,0,0) [/ matemáticas], [matemáticas] (1,1,0) [/ matemáticas], [matemáticas] (1,1,1) [/ matemáticas] y [matemáticas] ( 1,0,1) [/ matemáticas] usando el teorema de Green

Cómo simplificar 2 [3 + 2 (x-6)] +3 [-2 (x-5) +8]