haskell scanl元组

Ant*_*y W 1 haskell tuples fold

我有一个元组列表:

myList = [(1,1000), (2,2000), (3,3000),(4,4000]
Run Code Online (Sandbox Code Playgroud)

我想处理这个列表,以便每个元组的第一个元素保持不变,第二个元素是累积元素.所以对于上面的myList,它看起来像这样:

[(1,1000),(2,3000),(3,6000),(4,10000)]
Run Code Online (Sandbox Code Playgroud)

我已经尝试编写一个使用scanl1但不会编译的函数:

myFunction myList = scanl1 f l
           where f = (\acc (x,y) -> (x, acc + y))
Run Code Online (Sandbox Code Playgroud)

任何帮助,非常感谢

huo*_*uon 5

首先,这个问题有一个错字:它应该是myList,而不是lmyFunction myList = scanl1 f l.


主要问题是scanl1应该有类型的第一个参数a -> a -> a,但是你的扫描函数f有类型Num c => c -> (b, c) -> (b,c),当有一个a = c并且a = (b,c)(即c = (b,c)"无法构造无限类型"错误时)没有办法统一类型.

解决这个问题的方法是要记住,这scanl1 f适用f于上一个结果和列表中的下一个项目,在本例中是两个表单(x,y).这给出了:

myFunction myList = scanl1 f myList
       where f (_,acc) (x,y) = (x, acc + y)
Run Code Online (Sandbox Code Playgroud)

(注意.下划线表示未使用的参数.)