以下代码片段是否有快捷方式?
while (true) {
val newClusters = this.iterate(instances, clusters)
if (newClusters == clusters) {
return clusters
}
clusters = newClusters
}
我想计算不动点,即执行一个函数,使其结果稳定。您是否知道任何适合我的目的的高阶函数?
最佳答案
改编自 Martin Odersky 的 Scala By Example 中的定点计算示例(“第一类函数”一章,第 5.3 节),
val instances = ... // from question statement
def isApproxFeasible(x: Clusters, y: Clusters) = some_distance_x_y < threshold
def fixedPoint(f: Clusters => Clusters)(initApprox: Clusters) = {
def iterate(approx: Clusters): Clusters = {
val newClusters = f(approx)
if (isCloseEnough(approx, newClusters)) newClusters
else iterate(newClusters)
}
iterate(initApprox)
}
where 函数
f: Clusters => Clusters
提供新的候选集群,以及 initApprox
对应于固定点的第一个初始猜测。功能 isApproxFeasible
有助于确保先验阈值的终止。
关于scala - Scala 中的定点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22221243/