valores valor una tuplas tupla obtener listas lista empaquetado elementos como agregar acceder list haskell tuples

list - tuplas - obtener el valor de una tupla



¿Por qué usamos tuplas si podemos usar una lista bidimensional? (3)

¿Por qué usamos tuplas si podemos usar una lista bidimensional?

Debido a que las listas y las tuplas son conceptualmente diferentes, y el sistema de tipos nos proporciona una forma útil de indicar y reconocer la diferencia en el código. Para uno de los muchos ejemplos posibles, uno podría definir ...

type ListyPair a = [a]

... y entonces...

listyFst :: ListyPair a -> a listyFst [x, _] = x listySnd :: ListyPair a -> a listySnd [_, y] = y

... así que eso:

GHCi> listyFst [3,4] 3 GHCi> listySnd [3,4] 4

¿Pero qué sucede si el "par" listy tiene solo un elemento, o ninguno? Tendríamos que arrojar un error de tiempo de ejecución (yuck), o hacer que listyFst y listySnd listyFst como resultado un Maybe a para que podamos manejar el error limpiamente. ¿Qué pasa si el "par" tiene más de dos elementos? ¿Deberíamos descartarlos silenciosamente, o sería mejor hacer que las funciones también fallaran en este caso?

Desde la perspectiva de un usuario de un sistema de tipo fuerte, cuando reemplazamos un par real con ListyPair estamos ListyPair información útil. Saber que realmente solo hay dos elementos nos permite evitar todas las complicaciones anteriores.

realFst :: (a, b) -> a realFst (x, _) = x realSnd :: (a, b) -> b realSnd (_, y) = y

¿Hay algún beneficio en reservar específicamente combinaciones de datos variadas para tuplas como estas?

[(23, "Jordan"), (8, "Bryant")]

A diferencia de simplemente usar una lista bidimensional:

[[23, "Jordan"], [8, "Bryant"]]

Sé que el segundo código no funcionará en Haskell


Esta pregunta probablemente debería haberse expresado más claramente como:

¿Por qué debemos insistir en la definición de una lista como una colección de elementos de exactamente un tipo?

Desde un punto de vista, la respuesta podría ser que nos permite razonar acerca de las listas de manera rigurosa y que se puede hacer una nueva clase de operaciones. Ex. ¿De qué otro modo definirías el map para las listas?

Desde otro punto de vista, si las listas pueden contener varios tipos, el lenguaje no podría haberse escrito de forma estática. Ex. si le pasan una lista como argumento, ¿cuál es el tipo de elemento principal?

No tiene este problema con tuplas porque define el tipo de cada elemento a priori y la longitud es fija.

¿Hay algún beneficio en reservar específicamente combinaciones de datos variadas para tuplas ...

Es absolutamente necesario para un lenguaje estáticamente tipado que enumera elementos de retención de exactamente un tipo, por lo que la cuestión del beneficio no tiene ningún beneficio.


"¿Hay algún beneficio en reservar específicamente combinaciones de datos variadas para tuplas como estas?"

Sí. Los beneficios del uso de tuplas están relacionados con los patrones de uso en torno a los datos y los requisitos de rendimiento.

Las tuplas son a menudo inmutables y tienen un tamaño predecible.

Como está escribiendo un programa haskell, sus listas de "cadenas y números enteros" son en realidad una lista de un tipo de unión (llámelo como quiera) ... su tupla es solo un caso especial.

Este punto es un poco más claro si piensas en esto como código python. (Ambas cadenas que proporcionas son código python válido; originalmente pensé que la pregunta estaba relacionada con Python)

En Python, preferiría la Lista de Tuplas si supiera que las tuplas tienen una estructura fija (o predecible).

Eso te permitiría escribir código como:

[ print(name) for jersey, name in list_of_tuples ]

Elegirías usar la tupla si crees que no vale la pena pagar por el precio de una representación de objeto, y prefieres expresar cada referencia de tupla con un desembalaje.

Afortunadamente, ya que está escribiendo haskell, tiene una serie de herramientas para modelar y representar problemas con fuerza en el sistema de tipos. Creo que si te tomas un poco más de tiempo para leer y escribir algo de Haskell (Aprende Haskell para Great Good es un gran libro), entenderás mejor el sistema de tipos y encontrarás la respuesta para esto. tú mismo.

Si está buscando aprender más acerca de la programación funcional en general, The Little Schemer también es espectacular.

((un) Afortunadamente, en python puedes escribir código que maneje ambos tipos de estructuras de datos, en lugar de preocuparte por los tipos que entran en el código. Haskell requiere que pienses de manera un poco diferente).