私はScalaを初めて使いました。コレクションのパターンマッチングについて学び、最後の要素を見つけるために単純なロジックを一般的に書きました。ここに私の最初の試みがあります:Scalaリストの最後から2番目の要素を探す
@scala.concurrent.tailrec
def penultimate[A](elems: List[A]) = elems match {
case Nil => None
case first :: second :: Nil => Some(first)
case head :: tail => penultimate(tail)
}
これは十分ですか?私は尾の再帰について読んで、私のメソッドを尾の再帰的なものにしました!
しかし、それは次のような場合のために失敗し、私が期待するところ一部は(1):
penultimate[Int](List(1)) // This should give me Some(1)
は私が行うことができることをより良いものはありますか? Scalaコレクションライブラリのreverseメソッドを使用してこれを1つのライナーにすることはできますが、私はそれを使用しないようにしたいと考えていました。
良いアプローチがありますか?
あなたの言うことは間違っています。まず、あなたのコードはコンパイルされません。 2番目:コンパイルエラーを修正すると、 ''最後から2番目(List(1)) 'は' None'を返します。 –
混乱して申し訳ありません!私は自分の投稿を編集しました! –
今私は混乱しています。どうしてあなたは何かを信じるだろうか? –