清除功能方式以打破序列循环

时间:2017-02-20 14:49:53

标签: f# functional-programming break

我有一个带有可选退出条件的顺序进程。编写算法的一种方法就是这样

let mutable more = true
for slot = startSlot to endSlot do
    if more then
        more <- process()

检查more由于退出而跳过的插槽的开销是微不足道的。不过,似乎应该有更优雅的方式表达这一点。

2 个答案:

答案 0 :(得分:10)

递归通常在这里:

{{1}}

编译器会将此减少为一个简单的循环(不会发生实际的递归)。

答案 1 :(得分:5)

这样做的一种方法是使用Seq.takeWhile

seq{startSlot .. endSlot} 
|> Seq.takeWhile (fun _ -> process())
|> Seq.iter ignore

process()返回false

时,这将退出循环