una tuplas suma sobre promedio multiplicar listas lista funciones funcion encontrar elemento list haskell indexing

tuplas - promedio de una lista en haskell



Encontrar el índice del elemento en una lista en Haskell? (4)

¿Cómo encontrar el índice del elemento máximo? ¿Qué tal probar todos los índices y verificar si son los máximos?

ghci> let maxIndex xs = head $ filter ((== maximum xs) . (xs !!)) [0..]

Pero esto suena como algo para lo cual ya existe una función. Mi código será más legible, mantenible y probablemente incluso más eficiente si utilizo la función existente.

Así que debería preguntarle a SO cómo hacerlo, y en 15 minutos obtendré una respuesta y algunos comentarios sarcásticos. O bien, podría preguntarle a hoogle y obtener una respuesta útil de inmediato (como Will sugirió)

$ hoogle "Ord a => [a] -> Int" | head <Nothing relevant> $ # hmm, so no function to give me the index of maximum outright, $ # but how about finding a specific element, and I give it the maximum? $ hoogle "a -> [a] -> Int" | head Data.List elemIndex :: Eq a => a -> [a] -> Maybe Int Data.List elemIndices :: Eq a => a -> [a] -> [Int]

Tengo una función en Haskell que encuentra el valor máximo de una exponenciación de una lista:

prob99 = maximum $ map (/xs -> (head xs)^(head (tail xs))) numbers

Lo que necesito encontrar es la ubicación de este valor máximo en la lista resultante. ¿Cómo voy a hacer esto?

Editar: Encontré una solución que dice así:

n = [[519432,525806],[632382,518061].... prob99b [a,b] = b* (log a) answer = snd $ maximum (zip (map prob99b n) [1..])


Esto probablemente no merece ser una respuesta propia, pero aún no puedo comentar. De todos modos, así es como habría escrito esto:

import Data.List import Data.Ord maxIndex :: Ord a => [a] -> Int maxIndex = fst . maximumBy (comparing snd) . zip [0..]


Si está haciendo un cálculo numérico en Haskell, es posible que desee buscar en bibliotecas que lo hagan más fácil y más eficiente. Por ejemplo, hmatrix tiene un método maxIndex para Vector eficientes, cuya documentación está aquí: https://hackage.haskell.org/package/hmatrix-0.17.0.1/docs/Numeric-LinearAlgebra-Data.html#g:14

> maxIndex $ vector [1, 3, 2] 1

Los nombres exactos de los métodos eran diferentes cuando la pregunta se hizo originalmente, pero la biblioteca también estaba allí.


import Data.List elemIndex ''b'' "abc" === Just 1

Una herramienta realmente buena para encontrar funciones de Hoogle es Hoogle . Le permite buscar por tipo de firma entre otras cosas.

Si quisiera hacer todo de una vez, recomendaría Data.List.mapAccumL, pasando el índice del mayor número encontrado hasta el momento como el acumulador.