如果X
是一组数字,则ΔX
是数字的multiset,表示每两个数字之间的成对减法。例如,如果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]