Hola, les saluda Miguel y esta vez les traigo este nuevo tutorial.
Índice
Un monoide es fundamental para el mundo de la programación funcional
Para aquellos interesados ​​en la programación funcional, hablaré sobre los monoides y por qué es muy importante comprenderlos con anticipación.
No se confunda: esto no es mónada , es monoide. Estoy bastante seguro de que ya conoce los monoides y los usa casi todos los dÃas, simplemente no conocÃa el término para ellos.
Antes de leer
Esta es una serie sobre programación funcional, por lo que es posible que no comprenda de qué va a hablar este artÃculo si no ha leÃdo las publicaciones anteriores.
Puede consultar otras publicaciones relacionadas con este tema.
Función de identidad
Supongamos que hay una función llamada identity
eso toma A
y vuelve A
.
const identity: <A>(a: A): A => a;interface Student { name: string; age: number; }identity<number>(3) // 3 identity<string>('hello') // hello identity<Student>({ name: 'Bincent', age: 5 }); // { name: 'Bincent', age: 5 }
En programación funcional, esta función inútil (parece inútil) es un factor importante para muchos otros conceptos (como los monoides) de los que vamos a hablar.
Básicamente, un monoide es un conjunto de elementos que mantiene las reglas del semigrupo y la regla del elemento de identidad.
Si S
es un conjunto de elementos, a
es miembro de S
y ·
es una operación binaria adecuada, a·e = e·a ∈ S
debe estar satisfecho para ser un monoide.
Identity: a ∈ S, a·e = e·a = a ∈ S
Alguna documentación lo llama usando el número 1
y cualquier alfabeto en subÃndice, por ejemplo, 1x
se refiere a la identidad en la variable x
. O alguna documentación usa solo una letra del alfabeto, como i
o e
.
Eso es todo lo que hay que saber sobre los monoides, practiquemos con algunos ejemplos simples.
Ejemplos de monoide
Esta es la clase Monoid
eso te ayudarÃa a entender su concepto.
Esta clase tiene tres métodos:
-
Concat
: Toma dos argumentos y devuelve la suma de los argumentos. -
Identity
: Toma un argumento y devuelve el argumento sin hacer nada. -
Pick
: Toma un argumento que se refiere al valor de recuento de la cantidad de elementos que se deben recoger del conjunto; esto es solo para recoger los elementos aleatorios.
Y dos funciones de aserción:
-
AssertNumber
: Comprueba si el argumento es de tipo numérico. Si no es asÃ, arroja un error. -
AssertTrue
: Comprueba si el argumento es un tipoboolean
ytrue
. Si no es asÃ, arroja un error.
const set = new Monoid([1, 2, 3, 4, 5]);
Definà un conjunto que consta solo de números, por lo que el conjunto set
es un conjunto de números (aunque puse solo cinco números, asuma que tiene numerosos números).
Preguntas
const [a, b] = set.pick(2); assertNumber(a); assertNumber(b); assertNumber(a + b);
Si. Con dos números aleatorios del conjunto, cada elemento es un tipo de número y sumarlos también es un tipo de número.
const [x, y, z] = set.pick(3); assertNumber(set.concat(set.concat(x, y), z)); assertNumber(set.concat(x, set.concat(y, z))); assertTrue( set.concat(set.concat(x, y), z) === set.concat(x, set.concat(y, z)) );
Además, sÃ. Con tres números aleatorios del conjunto, (x+y)+z
y x+(y+z)
son un tipo de número y le están dando el mismo resultado: el orden de las operaciones no importa (asociatividad).
const [r] = set.pick(1); assertNumber(r); assertNumber(set.identity(r)); assertTrue(set.identity(r) === r);
¡Si! Cualquiera que sea el r
de elegir un número aleatorio fue, identity
devuelve el argumento sin hacer nada. Bueno, agrega cero al argumento, pero no cambia el argumento en absoluto.
El conjunto set
es un monoide.
¿Que sigue?
Comprender qué son los magmas, semigrupos y monoides no es lo más importante para estudiar o aprender en programación funcional, pero si conoce estos conceptos de antemano, también lo ayudará a comprender las otras teorÃas, como la categorÃa. teorÃa.
El siguiente tema de esta serie podrÃa ser la teorÃa de categorÃas y los functores.
- Monoide en Wikipedia
Espero que te haya sido de utilidad. gracias por leer este artÃculo.
Añadir comentario