我永远找不到 F# 核心库的源代码。我知道它应该是开放的,但谷歌在帮助我找到它时对我并不友好,如果是这样,我会查找 Seq.fold 的实现 - 但问题就在这里。
有没有人看到以下代码段有任何问题:
let success = myList |>
Seq.fold
(fun acc item -> evaluation item)
false
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,它似乎不保水,我可以并且将尝试对其进行测试。但我想问社区。如果 myList 中的任何单个评估返回 false,我希望成功变量为 false...
所以测试:
let myList = [true; true]
let success = List.fold (fun acc item -> acc && item) true myList
Run Code Online (Sandbox Code Playgroud)
和
let myList = [true; false; true]
let success = List.fold (fun acc item -> acc && item) true myList
Run Code Online (Sandbox Code Playgroud)
确实返回正确的结果 - 我只是看到源会更舒服......
我认为你正在寻找的是这样的:
let success = myList |>
Seq.fold
(fun acc item -> acc && evaluation item)
true
Run Code Online (Sandbox Code Playgroud)
这也提供了“短路”评估,因此如果 accfalse来自先前的评估,evaluation item则不会运行并且表达式将简单地 return false。