目前我有以下结构:
let rec foo x = State.state{
let rec bar =
//...
foo 5
//...
//...
bar
//...
}
我想提取“bar”函数并获得如下结构:
let rec foo x = State.state{
//...
bar
//...
}
and bar = State.state{
//...
foo 5
//...
}
这将允许我拥有另一个函数 foo2,它也可以使用 bar 并避免代码重复。
问题是:我的提案无法在 F# 中编译,显然这是因为状态上下文。那么达到所需代码结构的语法正确方法是什么?
最佳答案
这对我来说很好:
let rec foo x =
async {
return! bar x
}
and bar x =
async {
if x = 0
then printfn "bar"
else do! foo (x - 1)
}
Async.RunSynchronously (foo 10)
我首先遇到了格式方面的问题,因此请确保缩进正确并且感叹号位于正确的位置,否则类型将无法正常工作。
关于f# - 与计算表达式的相互递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37920954/