私はいくつかの一般的なアルゴリズムを実装しているスケーラをぶち壊しています。私はこの問題このNilケースを省略するにはどうすればいいですか?
に走ったバブルソートを再作成しようとしたときにここでトップに値を泡内部ループの実装です:
def pass(xs:List[Int]):List[Int] = xs match {
case Nil => Nil
case x::Nil => x::Nil
case l::r::xs if(l>r) => r::pass(l::xs)
case l::r::xs => l::pass(r::xs)
}
私の問題は、ケースNil => Nil
です。私はこの機能にNil
を適用できるので、これが必要であると私は理解しています。 Nil
がコンパイラを満たす方法で引数として提供されないようにする方法がありますので、このケースを排除できますか?
ああ、よく分かりませんでしたが、スカラについてはわかりません:-) –
これは一般的に 'List [Int]'の値にこの関数を適用することができないことに注意してください。実行時に指定された 'List [Int]'が空であるかどうかを認識していません(そうすることで、Haltingの問題を解決する必要があります)。パターンマッチングは、一般的に知られていない 'List [Int] '値が、' Nil'か ':: [Int]'かによって2つの異なる枝に分かれる仕組みです。これは、リストを 'List [Int]'として渡している場合、 'pass'を呼び出すたびにそれらのパターンを一致させる必要があることを意味します。 – Ben
そして、 'pass(1 :: 2 :: Nil)'のように呼び出すことはできません... –