找到列表的中间 - Haskell

时间:2014-12-10 19:53:55

标签: list haskell

我是哈斯凯尔的新手,我需要一些帮助。我写了一些非常简单的东西来计算数字列表的平方和。

sumOfSquares:: [Integer] -> Integer
sumOfSquares []       = 0
sumOfSquares (x:xs)   = x*x + sumOfSquares xs

所以sumOfSquares [1..10]将是385。

我正在努力寻找如何找到列表的中间部分并将'sumOfSquares'仅应用于中间元素及其上方的所有元素。

所以使用上面的例子,我只想找出5-10的平方和,忽略列表的前半部分。

我正在考虑使用splitAt,我是否沿着正确的路线?我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

您也可以在此示例中使用drop

sumOfSquares:: [Integer] -> Integer
sumOfSquares []       = 0
sumOfSquares (x:xs)   = x*x + sumOfSquares xs

sumOfSecondHalf xs = sumOfSquares $ drop len xs
    where len = length xs `div` 2 - 1

有关您的信息:

sumOfSquares $ drop len xs

与:

相同
sumOfSquares (drop len xs)

此外,您的sumOfSquares功能可以通过以下方式重写:

square :: Integer -> Integer
square x = x * x

sumOfSquares:: [Integer] -> Integer
sumOfSquares = sum . map square

其中map将函数square应用于列表的每个元素,sum返回列表的总和。

和此:

sumOfSquares = sum . map square

与:

相同
sumOfSquares xs = sum (map square xs)