我是函数式编程的新手,所以使用函数式方法似乎更难解决一些问题。
假设我有一个数字列表,例如 1 到 10.000,并且我想获取列表中的项目,其总和最多为一个数字 n(比如说 100)。所以,它会得到这些数字,直到它们的总和大于 100。
在命令式编程中,解决这个问题是微不足道的,因为我可以在每次交互中保留一个变量,一旦达到目标就停止。
但是我怎样才能在函数式编程中做同样的事情呢?由于 sum 函数对已完成的列表进行操作,而我仍然没有已完成的列表,我该如何“继续”计算?
如果 sum 是懒惰计算的,我可以写这样的东西:
(1 to 10000).sum.takeWhile(_ < 100)
PS:即使任何答案都会受到赞赏,但我想要一个不会每次都计算总和的答案,因为显然命令式版本在速度方面会更加优化。
编辑:
我知道我可以将命令式循环方法“转换”为函数式递归函数。我更感兴趣的是找到一个现有的库函数是否可以为我提供一种方法,让我不必在每次需要某些东西时都编写一个。