【发布时间】:2011-12-07 08:44:40
【问题描述】:
我需要摆脱 foldl。这是一个虚拟示例,当我计算列表中值的总和并遇到太大的值(即 10)时,如何从折叠中中断
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.
我知道这个例子是人为的,但是有什么好的方法可以打破折叠(我知道折叠总是扫描整个结构)?
请注意,即使我不折叠,我也需要检索正确的数据。在这种情况下,我应该从之前的迭代中获取数据(就像在我的示例中所做的那样)。
【问题讨论】:
-
“即使我从折叠中中断,我也需要检索正确的数据”是什么意思?您是否需要包含对投掷所做更改的列表?