gpt4 book ai didi

scala - 尾递归和 scalaz promises

转载 作者:行者123 更新时间:2023-12-01 11:57:08 25 4
gpt4 key购买 nike

我目前正在使用 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 调用会自动为您转换为延续传递样式。

关于scala - 尾递归和 scalaz promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5937216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com