Скольжения () на коллекции в Scala
Возможный дубликат:
Непоследовательное поведение для xs.sliding(n), если n меньше размера?
РЕДАКТИРОВАТЬ: я понимаю, что поведение, описанное здесь, является ожидаемым поведением скольжения; Я спрашиваю, почему это так.
РЕДАКТИРОВАТЬ 2: дубликат этого вопроса
Я использую функцию скольжения в коллекции Scala, и меня удивляет поведение в следующем случае:
скольжение ( N)
где М - это m.size, а М В этом случае вы не возвращаете пустой итератор, вы возвращаете одноэлементный итератор, где единственным элементом является вход: Например, вот простая функция для рекурсивного вычисления строки из треугольника Паскаля: но это не так, как ожидалось, из-за поведения, описанного выше: Вместо этого мы должны включить дополнительный особый случай: и теперь это работает, как ожидалось. Кто-нибудь знает, почему скольжение ведет себя так? Мне кажется странным, что я запрашиваю вложенные коллекции определенной длины, и в случае, рассмотренном здесь, вы получаете одну коллекцию другой длины!scala> List( ).sliding( 2 ).size
res0: Int = 0
scala> List( 1 ).sliding( 2 ).size
res1: Int = 1
def row( num : Int ) : List[ Int ] =
{
num match
{
case 0 => List( 1 )
case x : Int => List( 1 ) ++ row( x - 1 ).sliding( 2 ).map( _.sum ) :+ 1
}
}
scala> row( 1 )
res0: List[Int] = List(1, 1, 1)
def row2( num : Int ) : List[ Int ] =
{
num match
{
case 0 => List( 1 )
case 1 => List( 1, 1 )
case x : Int => List( 1 ) ++ row2( x - 1 ).sliding( 2 ).map( _.sum ) :+ 1
}
}