3

関数List[A] => List[List[A]]があり、「空の」値を返す必要がある場合、次の間に理論的な優先順位はありますか?

a)Nil

b)List(Nil)

...または機能に依存しますか?

n具体的な例として、次のように、リストを長さ以下のサブリストに分割する関数を実装できます。

def sublists[A](xs: List[A], n: Int): List[List[A]] = {
  val (ys, zs) = xs.splitAt(n)
  if (zs.isEmpty) ys :: Nil
  else            ys :: sublists(zs, n)
}

xsが空の場合、これは を返しますList(Nil)。この関数が正しいために、xsが空であるかどうかのチェックを含める必要がありますか?Nil

4

3 に答える 3

3

間違いなく、List 要素の型に関係なく、List の正しい空の値は空の List です。

より複雑な型についても同じことが言えます。空集合を含む集合は、空集合などとは大きく異なります。

次のように考えてみてください: リストの結果を使用すると、「結果はいくつあるか?」と尋ねることができます。空の値として空のリストを持つリストを使用すると、答えは間違って 1 になります。

于 2013-11-14T08:10:35.897 に答える
0

前後関係がわからないので、断定はできません。一般的に、答えは文脈に依存すると思います。要約すると、私は間違いなくクライアント コード ライターとして Nil を好みます。

splitAt の前に null チェックを配置するように再配置すると、うまくいきます。

于 2013-11-13T20:08:06.500 に答える