3

Есть ли ярлык для следующего фрагмента кода?Исправлена ​​ошибка в Scala

while (true) { 
    val newClusters = this.iterate(instances, clusters) 

    if (newClusters == clusters) { 
    return clusters 
    } 

    clusters = newClusters 
} 

Я хотел бы вычислить неподвижную точку, то есть выполнить функцию, чтобы ее результат был стабильным. Знаете ли вы о каких-либо функциях более высокого порядка, которые бы соответствовали моим целям?

ответ

1

Адаптация из примера расчета Fixpoint из Scala Согласно примеру от Одерски («функций первого класса» главу, раздел 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) 
} 

, где функция f: Clusters => Clusters обеспечивает новые кластеры кандидатов, и initApprox соответствует первому, начальному предположению о фиксированной точке. Функция isApproxFeasible помогает обеспечить окончание для a priori порог.

+0

Извините, но я не вижу никакой разницы в моем подходе, кроме того, что вы используете рекурсию. К сожалению, это не делает мой код короче или читабельнее. – user3267915

+0

Не беспокойтесь, неверно истолковали «функции более высокого уровня» от «первоклассных функций» :) Возможно, функции библиотеки/пакета могут быть другим наименованием, которое передает запрос :) – elm

Смежные вопросы