我永远找不到 F# 核心库的源代码。我知道它应该是开放的,但谷歌在帮助我找到它时对我并不友好,如果是这样,我会查找 Seq.fold 的实现 - 但问题就在这里。

有没有人看到以下代码段有任何问题:

let success = myList |>
                    Seq.fold
                        (fun acc item -> evaluation item)
                        false

从逻辑上讲,它似乎不保水,我可以并且将尝试对其进行测试。但我想问社区。如果 myList 中的任何单个评估返回 false,我希望成功变量为 false...

所以测试:
let myList = [true; true]
let success = List.fold (fun acc item -> acc && item) true myList


let myList = [true; false; true]
let success = List.fold (fun acc item -> acc && item) true myList

确实返回正确的结果 - 我只是看到源会更舒服......

最佳答案

我认为你正在寻找的是这样的:

let success = myList |>
                    Seq.fold
                        (fun acc item -> acc && evaluation item)
                        true

这也提供了“短路”评估,因此如果 acc 是来自先前评估的 false ,则 evaluation item 将不会运行并且表达式将简单地返回 false

MSDN documentation for fold operator

关于f# - Seq.fold 和 bool 累加器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3962074/

10-10 13:16