我需要从foldl中退出。这里是一个虚拟的例子,演示如何在计算列表中值的总和并遇到太大的值(即10)时从fold中退出。
L = [1,2,3,4,10,5,6,7],
Res =
try
lists:foldl(
fun(I, Value) ->
if (I < 10) ->
Value + I;
true ->
throw({too_big_value, Value})
end
end,
0, L)
catch
throw:{too_big_value, Value} -> Value
end,
Res.
我知道这个例子是人为的,但是有没有什么好方法可以打破fold(我知道fold总是扫描整个结构)?
请注意,即使我从fold中退出,我也需要检索正确的数据。在这种情况下,我应该从上一次迭代中获取数据(就像我的示例中所做的那样)。