sda*_*zig 4 algorithm functional-programming scala
在我的命令式Scala代码中,我有一个算法:
def myProcessor(val items: List) {
var numProcessed = 0
while(numProcessed < items.size) {
val processedSoFar = items.size - numProcessed
numProcessed += processNextBlockOfItems(items, processedSoFar)
}
}
Run Code Online (Sandbox Code Playgroud)
我想保留"块处理"功能,而不只是在项目列表上执行"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)
}
Run Code Online (Sandbox Code Playgroud)
假设"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)
}
Run Code Online (Sandbox Code Playgroud)
哪里process只处理当前的"头" List.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |