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会造成一定的时间延迟。我现在已经做到了。