gpt4 book ai didi

algorithm - 一个 "while remaining"算法如何转换为函数式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:45 27 4
gpt4 key购买 nike

在我的命令式 Scala 代码中,我有一个算法:

def myProcessor(val items: List) {
var numProcessed = 0
while(numProcessed < items.size) {
val processedSoFar = items.size - numProcessed
numProcessed += processNextBlockOfItems(items, processedSoFar)
}
}

我想保留“ block 处理”功能,而不仅仅是在项目列表上执行“takeWhile”。如何以函数式风格重写它?

最佳答案

您需要将其更改为递归样式,其中您在每个循环的“状态”中“传递”

@tailrec
def myProcessor(items: List[A], count: Int = 0): Int = items match{
case Nil => count
case x :: xs =>
processNextBlockOfItems(items, count)
myProcessor(xs, count + 1)
}

假设“processedSoFar”不是索引。如果您可以使用列表的当前“头”:

@tailrec
def myProcessor(items: List[A], count: Int = 0): Int = items match{
case Nil => count
case x :: xs =>
process(x)
myProcessor(xs, count + 1)
}

process 只会处理 List 的当前“head”。

关于algorithm - 一个 "while remaining"算法如何转换为函数式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202515/

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