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)
任何帮助,非常感谢
首先,这个问题有一个错字:它应该是myList
,而不是l
在myFunction 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)
(注意.下划线表示未使用的参数.)
归档时间: |
|
查看次数: |
162 次 |
最近记录: |