¿Cómo se vería un código JavaScript de ejemplo que utiliza Monad? Lo estoy preguntando porque la comprensión de Monad es mucho más clara si puedo ver un ejemplo de código (y el hecho de que JavaScript sea un lenguaje simple y funcional podría ser el mejor lenguaje para usarlo para aprenderlo).Mónadas en JavaScript?
Respuesta
Comenzaría escribiendo su propia mónada en JavaScript. La lista de mónadas es un gran lugar para comenzar; Lo encuentro de lejos el más útil. Simplemente defina funciones que hagan lo siguiente:
- Cree una lista de un artículo dado (llame a este
mreturn
). - Cree una lista vacía (llame a este
mzero
). - Agregue una lista a otra (llame a este
mplus
). - Aplicar una función para transformar cada elemento en una lista dada (llame a este
map
). - "Aplanar" una lista de listas en una lista simple concatenando las listas (llame a este
join
).
Esto define lo que se conoce como una "mónada aditivo" (mzero
y mplus
formar la parte "aditivo"). Juega para ver qué cosas interesantes puedes hacer usando solo estas funciones para operar en listas. Por ejemplo, se puede calcular la lista de todos los números pares en la tabla de multiplicar del schoolkid así:
var nums = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
var even_products = join(map(join(map(nums, function (x) {
return map(nums, function(y) { return x * y })
})),
function (x) { if (x % 2 == 0) { return mreturn(x) } else { return mzero() } }
));
Alternativamente, se combinan map
y join
juntos como una sola función definida como function bind(l, f) { return join(map(l, f)) }
. bind
se puede utilizar en lugar de map
y join
y se utiliza con más frecuencia en, p. Haskell. El mismo ejercicio anterior, entonces puede ser escrita:
var nums = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
var even_products = bind(
bind(nums, function (x) {
return bind(nums, function (y) { return mreturn(x * y) })
}),
function (x) { if (x % 2 == 0) { return mreturn(x) } else { return mzero() } }
);
Por último, es posible que desee incorporar estas funciones como parte de un nuevo prototipo de la lista (o lo que sea JavaScript tiene que transcurre para las clases en estos días), por lo que en su lugar puede escribir el jQuery-esque:
var nums = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
var even_products = nums
.bind(function (x) { return nums.bind(function (y) { return mreturn(x * y) }) })
.bind(function (x) { if (x % 2 == 0) { return mreturn(x) } else { return mzero() } });
- 1. Mónadas en el prompt?
- 2. Mezcla de mónadas en Haskell
- 3. Mónadas como adjuntos
- 4. Mónadas y actores
- 5. Corrientes vs mónadas
- 6. ¿Son las continuas mónadas?
- 7. Algunas preguntas sobre las mónadas en Haskell
- 8. Reempazar mónadas: ¿una forma genérica?
- 9. Reingresando notación para mónadas indexadas
- 10. Scala equivalente a las mónadas de Haskell
- 11. Construcciones de cálculo (Mónadas, Flechas, etc.)
- 12. evaluación de Haskell y perezosas Mónadas
- 13. buscando ejercicio de aprendizaje: implementar estas mónadas
- 14. Uso de estrategias paralelas con mónadas
- 15. Algunos lenguajes y usos para mónadas
- 16. ¿Hay algún uso de mónadas en el entorno .net?
- 17. Valores dentro de mónadas, anidados en estructuras de datos?
- 18. ¿De qué sirve usar mónadas en un intérprete?
- 19. combinando mónadas de may y seq: confundidas en la salida
- 20. usando mónadas para hacer transformaciones no disponibles a granel?
- 21. ¿Se combinan dos mónadas cuando ninguno tiene un transformador?
- 22. ¿Instancia aplicable para el estado y otras mónadas de MTL?
- 23. ¿Cuál es el estado actual de las mónadas restringidas?
- 24. ¿Consejos para un código más elegante con mónadas?
- 25. ¿Hay mónadas que se puedan usar como un autómata?
- 26. Combinación de mónadas (IEnumerable y Maybe como ejemplo)
- 27. Mónadas Haskell y un fallo que no requiere una cadena
- 28. cómo lograr el efecto "producto de dos mónadas"?
- 29. ¿Las mónadas Writer my E son categóricamente duales?
- 30. Plegable, composición de funciones, mónadas y pereza, ¿verdad?
Cuéntanos algo sobre Monad, ¿cómo se diferencia de javascript? –
@Umesh - http://en.wikipedia.org/wiki/Monad_(functional_programming) –
JQuery es más o menos una mónada en js. –