1. ホーム
  2. リスト

[解決済み】Scalaのリスト連結、::と++の比較

2022-03-24 07:22:23

質問

との間に違いはあるのでしょうか? :::++ Scala でリストの連結を行うには?

scala> List(1,2,3) ++ List(4,5)
res0: List[Int] = List(1, 2, 3, 4, 5)

scala> List(1,2,3) ::: List(4,5)
res1: List[Int] = List(1, 2, 3, 4, 5)

scala> res0 == res1
res2: Boolean = true

から ドキュメント のように見えます。 ++ はより一般的であるのに対し :::List -特有のものです。後者は他の関数型言語でも使われているから提供されているのでしょうか?

どのように解決するのですか?

レガシーです。リストは元々関数型言語っぽくなるように定義されていました。

1 :: 2 :: Nil // a list
list1 ::: list2  // concatenation of two lists

list match {
  case head :: tail => "non-empty"
  case Nil          => "empty"
}

もちろん、Scalaは他のコレクションもアドホックに進化させてきました。2.8が出たときに、コードの再利用とAPIの一貫性を最大化するためにコレクションが再設計され、その結果 ++ を連結して 任意 2つのコレクション、そしてイテレータまで。しかし、リストは、非推奨になった1つか2つを除けば、元の演算子を維持することができた。