2017-05-17 5 views
-1

個別のマッチングパターンについて質問があります。一致するパターンは、それぞれのケースが他のケースを踏んでいないときには互いに素である。個別パターンマッチング

def func(list: List[Int]): Int = list match { 
    case Nil => 0 
    case x::t if (x < func(t)) => x 
    case x::t => func(t) 
} 

私の質問:「場合」文はまた、これらのケースの互いに素であるかどうかを確認するためにカウントされますか? このようなパッチパターンがある場合は、最後のケースにも2番目のケースが含まれていることを意味し、とにかく途切れることはありません。しかし、最後のケースを

case x::t if (x >= func(t)) => func(t) 

に変更すると、一致するパターンはばらばらに見えますか?

答えて

0

x < func(t) = !(x >= func(t))であるため、これらのパターンはすべて非同期です。コンパイラはとにかく述語の分離を使用しません。これには具体的な意味はありません。