I have a function in Haskell which finds the maximum value of an exponentiation from a list:
prob99 = maximum $ map (\xs -> (head xs)^(head (tail xs))) numbers
What I need to find is the location of this maximum value in the resultant list. How would I go about this?
Edit: I found a solution that goes like this:
n = [[519432,525806],[632382,518061].... prob99b [a,b] = b* (log a) answer = snd $ maximum (zip (map prob99b n) [1..])
To find the (row, column) index pair of an element in a list of lists, iterate over the rows and their indices using the enumerate() function and use the row. index(x) method to determine the index of element x in the row .
indexOf() The indexOf() method returns the first index at which a given element can be found in the array, or -1 if it is not present.
Look here, the operator used is !! . I.e. [1,2,3]!! 1 gives you 2 , since lists are 0-indexed.
How to find the index of the maximum element? How about trying all indexes and checking whether they are the maximum?
ghci> let maxIndex xs = head $ filter ((== maximum xs) . (xs !!)) [0..]
But this sounds like something for which a function already exists. My code will be more readable, maintainable, and probably even more efficient, if I used the existing function.
FYI, you can also ask Hoogle that can search by Haskell type signatures (as Will suggested):
$ 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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With