es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Devuelve el elemento de una lista en el que el valor de retorno de la función sea el más alto.

Tengo que escribir una función Ord c => (a -> b) -> [a] -> a que devuelva el valor en el que el primer parámetro de la función devuelva el valor más alto.

Por ejemplo:

ownMax (\x -> x mod 5) [7,8,9] == 9

ownMax length [“words”, “are”, “hard”] == “words”

Hasta ahora, tengo el siguiente código donde intenté utilizar la función maximumBy ya que se puede utilizar para obtener resultados similares a los que quiero lograr.

ownMax :: Ord c => (a -> b) -> [a] -> a
ownMax f (x:xs) = maximumBy((\a b -> compare (f a) (f b)) (x:xs))

En este momento, no se puede cargar debido a un error de No se pudo coincidir el tipo ‘Ordering’ con ‘a -> Ordering’.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver el error, debes cambiar los paréntesis en la expresión lambda para que envuelvan solo las variables a y b, así:

    ownMax :: Ord c => (a -> b) -> [a] -> a
    ownMax f (x:xs) = maximumBy (\a b -> compare (f a) (f b)) (x:xs)
    

    Esto debería funcionar para devolver el valor en el cual el primer parámetro de la función devuelve el valor más alto.

Comments are closed.