scala之尾递归和 scalaz promises
soundcode
阅读:16
2024-11-24 20:56:43
评论:0
我目前正在使用 Scalaz 非阻塞 future 。 promise 。我正在努力使以下函数尾递归:
@tailrec
private def repeat( res: Promise[I] ):Promise[I] =
res map p flatMap {
(b:Boolean) =>
if( b ) repeat( res flatMap f ) else res
}
其中 p
是类型为 I=>Boolean
的谓词,f
是类型为 输入 I=>Promise[I]
。
该方法在没有注释的情况下编译。
有什么提示吗?谢谢
请您参考如下方法:
您的方法根本不是递归的。 res
是一个可能在另一个线程中运行的计算。 res map p flatMap f
将立即返回就您的方法而言的 promise 。 repeat
的重现将发生在不同的进程中。
用稍微更简洁的术语来说,Promise
是一个延续 monad,flatMap
调用会自动为您转换为延续传递样式。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。