by shigemk2

当面は技術的なことしか書かない

unreachable code

stackoverflow.com

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))