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.
この例は人工的なものですが、フォールドを分割するための優れた方法はありますか(フォールドは常に構造全体をスキャンすることを知っています)?
フォールドから抜けても正しいデータを取得する必要があることに注意してください。この場合、前の反復からデータを取得する必要があります(私の例で行ったように)。