UTNianos

Versión completa: [Consullta Haskell] Lista de tuplas
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola tengo una duda en cuanto al manejo de una lista en la q cada elemento es una tupla.

Por ejemplo si tengo la lista : [('a',1,2,3),('b',4,5,6),('c',7,5,8)]
y quisiera retornar otra lista con el primer elemento de las tuplas q tienen un 5 en su tercer elemento
en este caso seria ['b','c']
Como se hace para trabajar con los elementos de las tuplas que se encuentran en la lista? O se usa la lista ?

Muchas gracias
Creo que te expresaste mal al decir "en este caso sería ['a', 'c']", ya que ni la tupla de 'a' ni la tupla de 'c' tienen un 5 en su tercer elemento...

En fin, tal vez puede ayudarte esto:
laLista = [('a', 1,2,3), ('b',4,5,6), ('c',7,5,8)]
elTercerElementoDeLaTupla (_, _, x, _) = x==5
f lista = filter elTercerElementoDeLaTupla lista


Probás con:
f laLista

Y te devuelve:
[('b',4,5,6),('c',7,5,8)]



Uso el mágico filter, que recibiendo una función (que toma un elemento de la lista que vas a ingresar y devuelve un booleano) y una lista, filtra "las que son True".

Después, lo que necesitarías, es agregar otra función onda elPrimerElementoDeLaTupla que: reciba esa lista que devuelve (la función que yo definí como) f y que devuelva solamente la lista de los primeros elementos, que son chars.
Cuando quieras operar en una lista podes usar funciones de orden superior (map, filter...).

En este caso tendrías que filtrar de la lista a todos las tuplas de las cuales el 4to elemento sea 5, y de la lista resultante obtener el primer elemento.



eval x = map f $ filter c x

c (_, _, _, d) = d == 5

f (a, _, _, _) = a



Saludos.
Lo que dijeron arriba está bien pero te devuelve las tuplas enteras. Si querés que devuelva solo el primer elemento de las tuplas que cumplen esa condición, además tendrías que hacer un map con la lista que te dio la función que hizo pablit. Usando la función f de arriba como auxiliar, la función principal te quedaría así:


devolverPrimerosElementosDeLaLista lista = map primerElemento (f lista)
primerElemento (x,_,_,_) = x

Muchas gracias a todos, ahora entendi como se hace. Lo q qeria era q devuelva el primer elemento de la tupla como dijo Jess
URLs de referencia