F# 计算表达式的互递归

F# 计算表达式的互递归,f#,F#,目前我的结构如下: 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

目前我的结构如下:

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)

我首先遇到了格式问题,因此请确保缩进正确,感叹号位于正确的位置,否则类型将不起作用。

出现了什么错误?确实,像使用async一样格式化我的状态计算,解决了问题。谢谢@弗里德里希·格雷茨,如果答案解决了你的问题,接受吧it@FoggyFinder不确定您的评论是有帮助还是唠叨,但在任何情况下,在允许您标记解决方案之前,stackoverflow会造成一定的时间延迟。我现在已经做到了。