使用map和sum来应用函数并求和结果

时间:2019-05-03 00:44:46

标签: haskell

我有点不在意了。我一直在使用高阶函数,并且试图应用一个函数并使用(。)组合函数。我正在尝试编写将函数(第一个参数)应用于列表中的每个元素(第二个参数)并求和结果的函数总计。

为我提供了一个特定的类型定义(不应该更改),我试图将功能map f到列表,然后sum返回列表。

 total :: (Int -> Int) -> [Int] -> Int
 total f x = sum x . map f x

我应该得到一个整数,即总数的sum。我收到一个错误,但这是我不熟悉的错误:

* Couldn't match expected type `Int' with actual type `[Int] -> c0'
* Probable cause: `(.)' is applied to too few arguments
  In the expression: sum x . map f
  In an equation for `total': total f x = sum x . map f

我需要方向。我不明白为什么将.应用于更多参数。

1 个答案:

答案 0 :(得分:4)

map已完全应用,因此您不应在此处使用合成。

使用应用程序运算符

total f x = sum x $ map f x

或者,如果sum不需要x,则可以忽略该函数的显式参数,而改为使用composition

total f = sum . map f

复合运算符期望有一个函数,但是您要完全应用map并将该运算符传递给map返回的列表。

(我不熟悉虽然会与列表一起接受int的sum函数。这也是错误吗?)