Если X
представляет собой набор чисел, то ΔX
представляет собой цифры multiset, представляющие попарные вычитания между каждыми 2 числами. Например, если X
представляет собой набор точек на линии в порядке возрастания, то ΔX
представляет собой мультимножество попарных расстояний между этими точками. Как написать функцию, которая возвращает попарные расстояния для списка чисел? Ниже работает, но я хочу более элегантное решение. Пожалуйста, включите теорию или интуиции, которые могли бы дать представление о том, как решить подобные проблемы, если это возможно.Сопряженные расстояния списка номеров в Haskell
pairwise_distances :: [Int] -> [Int]
pairwise_distances [] = []
pairwise_distances [x] = []
pairwise_distances (x:xs) = sort $ map (abs . (x-)) xs ++ pairwise_distances xs
pairwise_distances [3,2,1] -- [1,1,2]
pairwise_distances [0,2,4,7,10] -- [2,2,3,3,4,5,6,7,8,10]