我尝试去通过列表xl的List.fold_left,我想退出迭代时,一些条件得到满足:
List.fold_left
(fun x acc ->
if x = 5 then STOP THE ITERATION
else x + acc)
xl
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何在STOP THE ITERATION这里表达?谢谢
编辑1:根据上面的代码,我想说我们不会停止累积,直到我们遇到第一个5.
你不能用内置的折叠来做到这一点,没有例外,或者在累加器中为剩余的调用标记了一些无操作 - 如phimuemue提到的那样.或者,您可以编写一个非常简单的尾递归函数来处理早期返回,
(** Fold left on a list with function [f] until predicate [p] is satisfied **)
let rec fold_until f p acc = function
| x :: xs when p x -> acc
| x :: xs -> fold_until f p (f acc x) xs
| [] -> acc
let accum_until_five =
fold_until (fun acc x -> x + acc) (fun x -> x = 5) 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |