The following function finds all local maxima.
A local maxima is an element of a list such that it's greater than either of its neighbor elements. An element with 1 neighbor is not a local maximum.
localMaxima :: [Integer] -> [Integer]
localMaxima (x:y:z:zs) = if (y > x && y > z) then y : localMaxima (y:z:zs)
else localMaxima (y:z:zs)
localMaxima _ = []
Please critique it.
Examples:
ghci> localMaxima [1,3,2,55,2]
[3,55]
ghci> localMaxima [1,3,2,55,1000000000]
[3]
locmax xs = map (\(x, y, z) -> x) . filter (\(x, y, z) -> x > y && x > z) $ zip3 (drop 1 xs) xs (drop 2 xs)
. – Cthulhu 1 hour ago