3

다음 코드 단편에 대한 바로 가기가 있습니까?스칼라에서 고정 소수점

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

    if (newClusters == clusters) { 
    return clusters 
    } 

    clusters = newClusters 
} 

고정 소수점을 계산하고 싶습니다. 즉, 결과가 안정적 이도록 함수를 실행하고 싶습니다. 내 목적에 맞는 고등 기능을 알고 있습니까?

답변

1

마틴 오더 스키 (제 첫 클래스 함수 ', 5.3)에 의해 스칼라 바이 예에서 fixpoint 계산 예로부터의 적응

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선험적으로 임계 값에 대한 종료를 보장합니다.

+0

죄송합니다. 재귀를 사용하고 있다는 사실 외에도 다른 접근 방식은 없습니다. 불행하게도, 그것은 내 코드를 더 짧거나 더 가독성있게 만들지 않습니다. – user3267915

+0

걱정하지 말고 "최상위 함수"로 "상위 수준 함수"를 잘못 해석했습니다 :) 아마도 라이브러리/패키지 함수는 질의를 전달하는 또 다른 이름 일 수 있습니다. :) – elm