如何在OCaml中退出迭代?

Sof*_*mur 3 iteration ocaml

我尝试去通过列表xlList.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.

nlu*_*oni 7

你不能用内置的折叠来做到这一点,没有例外,或者在累加器中为剩余的调用标记了一些无操作 - 如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)