列表上的这个递归函数的其他代码

jin*_*ou2 1 haskell list fold

我编写了一个函数来查找asciibox的下一列的位置,
例如:

+-----++---++---+
|  a  || b || c |
+-----++---++---+
Run Code Online (Sandbox Code Playgroud)

框b应从列"伪代码"{length(方框a)}开始,方框c应从伪代码{长方框a +长度方框b}开始

所以我写了这个功能

f:: [Int]->[Int]->[Int]
f (x:xs) []  = f xs [x]
f  [] ys = ys
f (x:xs) ys = f xs (ys++[x+ last ys])
Run Code Online (Sandbox Code Playgroud)

这给了我想要的东西

f [23,24,25] [] 
ghci> [23,47,72]
Run Code Online (Sandbox Code Playgroud)

我想知道其他算法是否可行.有"折叠"或"展开"或者"迭代"的解决方案吗?

谢谢

Dan*_*ner 5

> scanl (+) 0 [23, 24, 25]
[0,23,47,72]
Run Code Online (Sandbox Code Playgroud)

  • 或者`scanl1(+)[23,24,25]`,如果列表从不为空,则除去0. (3认同)