2017-05-17 6 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) 
} 

내 질문 : "if"문구가 계산되어이 사례가 연결되지 않았는지 확인하십시오. 이렇게 패치 패턴이 있다면 마지막 케이스도 두 번째 케이스를 포함하고 어쨌든 분리되지 않는다는 것을 의미합니다. 하지만 마지막 사례를

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

으로 변경하면 일치하는 패턴이 서로 겹치지 않습니까?

답변

0

x < func(t) = !(x >= func(t))이므로 이러한 패턴은 모두 연결이 끊어져 있습니다. 컴파일러는 어쨌든 술어 분리 (disjointness)를 사용하지 않습니다. 이것은 구체적인 의미를 갖지 않을 것이다.