Recientemente vi algunos Clojure o Scala (lo siento, no estoy familiarizado con ellos) y lo hicieron zip en una lista o algo así. ¿Qué es zip y de dónde vino?¿Qué es zip (programación funcional?)
Respuesta
Zip es cuando toma dos secuencias de entrada y produce una secuencia de salida en la que cada dos elementos de secuencias de entrada en la misma posición se combinan utilizando alguna función. Un ejemplo en Haskell:
de entrada:
zipWith (+) [1, 2, 3] [4, 5, 6]
de salida:
[5, 7, 9]
Lo anterior es una definición más genérica; a veces, zip
se refiere específicamente a la combinación de elementos como tuplas. P.ej. en Haskell nuevo:
de entrada:
zip [1, 2, 3] [4, 5, 6]
Salida:
[(1, 4), (2, 5), (3, 6)]
Y la versión más genérica se denomina "zip con". Puede considerar "zip" como un caso especial de "zipWith":
zip xs ys = zipWith (\x y -> (xs, ys)) xs ys
zip es un método de programación funcional común como map o fold. Encontrarás estas funciones en los ceceos iniciales hasta ruby y python. Están diseñados para realizar operaciones batch comunes en las listas.
En este caso particular, zip toma dos listas y crea una nueva lista de tuplas de esas listas. Por ejemplo, supongamos que tiene una lista con (1,2,3) y otra con ("uno", "dos", "tres") 1, "uno"), (2, "dos"), (3, "tres"))
o desde la línea de comandos Scala, se obtendría:
scala> List(1,2,3).zip(List("one","two","three"))
res2: List[(Int, java.lang.String)] = List((1,one), (2,two), (3,three))
Cuando vi por primera vez en Python, sin saber programación funcional, pensé que estaba relacionado con el formato de compresión. Después de que aprendí más sobre programación funcional, la he usado más y más.
Por lo general, ¿cuándo se usa el método zip, o en otras palabras, cuál es el caso de uso típico de zip en real proyectos? –
La respuesta de Pavel prácticamente lo describe.Voy a proporcionar un F # ejemplo:
let x = [1;2]
let y = ["hello"; "world"]
let z = Seq.zip x y
El valor de z
habrá una secuencia que contiene tuplas de elementos en la misma posición de las dos secuencias:
[(1, "hello"); (2, "world")]
podría utilizar el siguiente código en Python:
>>> a = [1,2]
>>> b = [3,4]
>>> zip(a,b)
[(1,3),(2,4)]
Desafortunadamente no tengo puntos suficientes para incluso dejar un comentario sobre la respuesta de arriba, pero
zip xs ys = zipWith xs ys (\x y -> (xs, ys))
es mal, debería ser:
zip xs ys = zipWith (\x y -> (x,y)) xs ys
o simplemente:
zip = zipWith (\x y -> (x,y))
'zip = zipWith (,)' –
- 1. ¿Por qué es buena la programación funcional?
- 2. ¿XSLT es un lenguaje de programación funcional?
- 3. ¿Qué es un estilo sin puntos en la programación funcional?
- 4. ¿A qué tipo de problema es adecuada la programación funcional?
- 5. Programación funcional: Efectos secundarios
- 6. Arquitectura de programación funcional
- 7. ¿La programación funcional es un subconjunto de la programación imperativa?
- 8. ¿Qué lenguaje de programación funcional debería elegir como primer lenguaje de programación funcional?
- 9. programación funcional en Java
- 10. Haskell - Programación funcional Ayuda
- 11. Programación funcional aplicada
- 12. Documentación de programación funcional
- 13. SÓLIDO para programación funcional
- 14. Programación funcional en C++
- 15. ¿Qué es la descomposición funcional?
- 16. Programación funcional pura en D
- 17. Programación funcional: Mejor plataforma/Entorno
- 18. Programación funcional en plantas nucleares?
- 19. Scala gimnasia de programación funcional
- 20. ¿Cuál es el lenguaje de programación funcional más mínimo?
- 21. Aprendizaje funcional/programación Clojure - ejercicios prácticos?
- 22. Errores/Desventajas de la Programación Funcional
- 23. Diagramas de flujo de programación funcional
- 24. Ordenando en lenguajes de programación funcional
- 25. Comentarios adecuados para la programación funcional
- 26. firmas/tipos en programación funcional (OCaml)
- 27. Programación funcional en C++ 11, estilo F #
- 28. Acerca de la programación de estilo funcional
- 29. cola Funcional De Programación En Scala
- 30. Modelo de máquina para programación funcional
no equivalente en Scala. En scala tendrías que hacer un zip, luego un mapa – drudru
¡Gracias, claro! –
Bueno, en realidad no es "no equivalente", es solo que Scala no tiene 'zipWith'. Obviamente, puede hacer cualquiera de los dos: defina 'zip' en términos de' zipWith', o defina 'zipWith' en términos de' zip' y 'map'. –