
On Thu, 19 May 2016, Henning Thielemann wrote:
On Thu, 19 May 2016, David Feuer wrote:
You promised a collection of use cases. I seem to have missed it. Could you send the link again?
I found the following uses in my libraries:
* mapAdjacent subtract differences between consecutive elements, inverse of cumulative sum (scanl (+) 0)
* and . mapAdjacent (==) check whether all elements in a list are equal
* and . mapAdjacent (<=) check whether elements are sorted
* mapAdjacent (/=) . map signum find zero crossings
* head . dropWhile (uncurry (/=)) . mapAdjacent (,) drop until convergence
* mapAdjacent (\x y -> (snd x, fst y)) turn list of intervals into list of gaps
* mapAdjacent (,) collect state transitions for a Hidden Markov model
* product . mapAdjacent binomial . scanr1 (+) compute multinomial coefficient
I found another application: Compute the longest duplicated string. https://programmingpraxis.com/2010/12/14/longest-duplicated-substring/ import Data.List import Data.List.HT (mapAdjacent) import qualified Data.List.Key as K lds :: Ord a => [a] -> [a] lds = K.maximum length . mapAdjacent lcp . sort . tails where lcp (x:xs) (y:ys) | x == y = x : lcp xs ys lcp _ _ = []