def ack2(m: BigInt, n: BigInt): BigInt = { val z = BigInt(0) (m,n) match { case (z,_) => n+1 case (_,z) => ack2(m-1,1) // unreachable code case _ => ack2(m-1, ack2(m, n-1)) // unreachable code } } println(ack2(1, 0))
こんなコードを書いた時に、コメントのところでunreachable codeになる。理由は、パターンマッチの外で定義している変数をパターンマッチの中で使っているから。
warningですけどね。このwarningをどうにかして、zをパターンマッチの中で使いたい場合は、以下のように書く。
def ack2Better(m: BigInt, n: BigInt): BigInt = { val z = BigInt(0) (m,n) match { case (`z`,_) => n+1 case (_,`z`) => ack2Better(m-1,1) case _ => ack2Better(m-1, ack2Better(m, n-1)) } } println(ack2Better(1, 0))