0

重複の可能性:
n がサイズより小さい場合、xs.sliding(n) の動作に一貫性がありませんか?

編集:ここで説明されている動作は、スライドの予想される動作であることを認識しています。なぜこのようなことになるのか、私は疑問に思っています。

編集2:この質問の複製

scala コレクションでスライディング関数を使用していますが、次の場合の動作に驚いています。

m.sliding( N )

ここで、M は m.size であり、M < N です。

この場合、空のイテレータは返されません。唯一の要素が入力である単一要素のイテレータが返されます。

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
    }
}

これは期待どおりに機能するようになりました。

スライドがこのように動作する理由を誰かが知っていますか? 特定の長さのサブコレクションを要求するのは奇妙に思えますが、ここで説明した場合、異なる長さの単一のコレクションが得られます!

4

0 に答える 0