Я новичок в Scala и пришел к этому с необходимостью, но я хотел бы понять это с функциональной точки зрения.Я очень озадачен поведением следующих фрагментов кода.
val res = for {
i <- 1 to 2
j <- 1 to 2
} yield (i, j)
println(s"res is $res")
Этот код напечатает res is Vector ((1,1), (1,2), (2,1)), (2,2)) как и ожидалось.Тем не менее, слегка изменив вышеприведенное значение до
val res = for {
i <- 1 to 2
j <- i to 0
} yield (i, j)
println(s"res is $res")
print res is Vector ()
Почему вторая версия цикла не дает Vector ((1,1), (1,0), (2,2), (2,1), (2,0))?
Это поведение оказывает значительное влияние на мою способность циклически перемещаться по 2D-матрицам с использованием индексов вScala.В общем, как можно зацикливаться ТОЛЬКО на верхней треугольной части матрицы идиоматическим образом, отслеживая индексы строк и столбцов?