[英]How do I find the Average of a List of Coordinate Tuples in Haskell?
如何在 Haskell 中添加表示 x 和 y 坐标的元组列表,然后找到所有 x 值和 y 值的平均值(基本上是试图找到一个质心)。
所以假设我有一个 [(1,1),(2,2),(3,6)] 的输入列表,我希望输出是 (2,3)。
这将在没有空间泄漏和不破坏流融合的情况下工作:
{-# LANGUAGE BangPatterns #-}
import Data.Foldable (foldl')
centroid :: (Fractional n, Foldable t) => t (n, n) -> (n, n)
centroid coords = (xsum/count, ysum/count)
where (xsum,ysum,count) = foldl' go (0,0,0) coords
go (!xs,!ys,!c) (x,y) = (xs + x, ys + y, c + 1)
如果需要,可以随意将 / 替换为 `div`,将 Fractional 替换为 Integral,和/或在必要时添加 realToFrac 以使您的类型有效。 此外,如果您不想使用 BangPatterns,您可以在所有三个元素上使用 seq。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.