Hack x Crack - Comunidad de Seguridad informática

Programación => Otros => Mensaje iniciado por: adri92 en Diciembre 09, 2012, 05:51:51 pm

Título: [Haskell] Duda con función que devuelve una dupla de una lista de duplas
Publicado por: adri92 en Diciembre 09, 2012, 05:51:51 pm
Muy buenas chicos!

Os comento, tengo un ejercicio por aquí que me está dando algunos problemitas.
Os comento... Tengo un tipo Empleado que se define como sigue:

type Empleado = (Edad, Nombre) , donde Edad es un tipo Integer y nombre un String.

Hasta ahí perfecto.
Además de esto, me he creado una "Db", tal que así:

Db = [Empleado], para tener una "base de datos" con una lista de empleados.

Tengo que hacer una función, masJoven, que me devuelva el empleado más joven de todo el listado.

De momento tengo esto:

Código: [Seleccionar]
type Edad = Integer
type Nombre = String
type Empleado = (Edad, Nombre)
type Db = [Empleado]

masJoven :: Db -> Empleado
masJoven (x:[]) = x
masJoven (x:y:[]) = if (fst x) < (fst y) then x
                        else y
masJoven (x:y:xs) = ¿?¿?¿¿??¿¿?¿?¿¿ =(

Pero no tengo ni idea de hacer el caso para cuando la lista tiene más de dos elementos (esto es, más de dos duplas) =(

A ver si me podéis echar una mano chicos.

gracias!
Título: Re:[Haskell] Duda con función que devuelve una dupla de una lista de duplas
Publicado por: kenkeiras en Diciembre 14, 2012, 07:56:28 pm
En programación funcional para esas cosas se usa recursividad [ http://learnyouahaskell.com/recursion (http://learnyouahaskell.com/recursion) ]
Cuesta un poco verlo al principio pero una vez se enciende la bombilla se toma rápidamente la costumbre ;).

Suerte
Título: Re:[Haskell] Duda con función que devuelve una dupla de una lista de duplas
Publicado por: cipos en Diciembre 24, 2012, 02:56:13 am
 El código de la función sería el siguiente:
Código: [Seleccionar]
masJoven :: Db -> Empleado
masJoven (x:[]) = x
masJoven (x:y:xs) = if (fst x) < (fst y) then masJoven (x:xs) else masJoven (y:xs)

 Si se da que dos personas tienen la misma edad, dejo que mantenga la clave que había elegido. El tema es que entiendas lo que hace el algoritmo. Si necesitas que lo expliqué avisa e intento aclararte cómo se encaran este tipo de ejercicios de recursividad.

 Es un ejercicio bastante simple de recursividad, yo te diría que leas un poco sobre el tema por que si sigues avanzando en programación funcional sin entender recursión, no vas a entender nada.

 Si te interesa entender el tema puedo recomendarte libros (no se si están en internet), o algunas páginas sobre el tema. Si sólo querías que te hagan los deberes pues, ahí lo tienes.

 Una página como para empezar es http://aprendehaskell.es (http://aprendehaskell.es). Lo mejor, creo yo, es estudiar de libros, no de apuntes sueltos de internet, estos sirven para leer sobre algún punto que no queda muy claro en el libro. Pero para arrancar creo que es mejor estudiar de un libro. Yo aprendí Haskell con el libro de Richard Bird "Introducción a la programación funcional con Haskell", creo que esta en internet para descargar el PDF. Mi consejo es que consigas ese libro (u otro que te recomienden) y lo estudies de ahí.

 Había un libro que creo no esta en internet que se llama "Razonando con Haskell, un curso de programación funcional" o algo así era el título, no recuerdo el/la autora, pero me dijeron que era muy bueno para aprender. Prueba de encontrarlo en internet (yo no lo tengo ni en papel, no lo conseguí en su momento y luego abandone mis intentos de conseguirlo).

Saludos!.