UTNianos

Versión completa: [AYUDA] Paradigmas ejercicio funcional
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola gente necesito ayuda con este ejercicio que no me sale, gracias de ante mano:

Utilizando la función foldl1, desarrollar la función maximoSegun que dada una función y una lista devuelve el elemento de la lista que hace máxima la función.
Ej:
ム maximoSegun id [1,2,3,4,5]
5
ム maximoSegun negate [1,2,3,4,5]
1
ム maximoSegun length ["hola","paradigmas", "como","estas"]
"paradigmas"
Hola! Primero que nada, nadie sabe por qué no te sale este ejercicio. Segundo, quizás si te describo qué debe hacer la función se te ocurre algo!

La idea es definir una función maximoSegun que recibe otra función (ergo, es una función de orden superior) y una lista.

Esta función tiene que devolverte el elemento perteneciente a la lista que, evaluado con la función que te pasaron por parámetro, retorne el mayor valor de todas. Un caso de prueba minucioso:

maximoSegun length ["ivanorr1s", "chau"]
length "ivanorr1s" = 9
length "chau" = 4
retorno: "ivanorr1s"

Saludos!
foldl1 toma 1 funcion y 2 valores para operarlos, y devuelve 1 valor.
El chiste de foldl1 es eso, olvidarse de las listas, y centrarse en resolver el problema con esa función y esos 2 parametros.
Te hago esta aclaración porque al pensarlo así es casi imposible que no te salga. El procedimiento es muy boludo.

mayorSegun f a b
| (f a) < (f b) = b
| otherwise = a

maximoSegun f = foldl1 (mayorSegun f)
Muchas gracias por la ayuda! Ya me salio.
Saben como se podria hacer usando recursividad?
URLs de referencia