Следующая функция вычисляет евклидово расстояние между двумя 2D-точками в Scala:
def euclideanDist(pt1: List[Double], pt2: List[Double]): Double =
sqrt(pow(pt1(0)-pt2(0), 2)+pow(pt1(1)-pt2(1), 2))
Я хотел бы разработать функцию периметра, чтобы накапливать расстояния между каждой последовательной точкой в списке точек (илиListBuffer).
Например,
val arr:ListBuffer[List[Double]] = ListBuffer(List(0, 0), List(0,1), List(1,1), List(1,0), List(0, 0))
perimeter(arr)
должен выдавать результат как 4.
Это то, что я пробовал:
def perimeter(arr: ListBuffer[List[Double]]): Double =
arr.reduceLeft(euclideanDist)
При выполнении компиляторвыдает эту ошибку
Name: Unknown Error
Message: <console>:43: error: type mismatch;
found : (List[Double], List[Double]) => Double
required: (Any, List[Double]) => Any
arr.reduceLeft(euclideanDist)
^
<console>:43: error: type mismatch;
found : Any
required: Double
arr.reduceLeft(euclideanDist)
^
StackTrace:
Я мог бы сделать императив и сделать все это с помощью цикла for, но хотел бы знать, может ли это быть решено проще с помощью метода Scala.