Я плохо знаком с Scala... Вот код:
def ack2(m: BigInt, n: BigInt): BigInt = {
val z = BigInt(0)
(m,n) match {
case (z,_) => n+1
case (_,z) => ack2(m-1,1) // Compiler says unreachable code on the paren of ack2(
case _ => ack2(m-1, ack2(m, n-1)) // Compiler says unreachable code on the paren of ack2(
}
}
Я пытаюсь понять, что..., почему это дает ту ошибку?
Примечание: Я использую Scala 2.8.0.r21376-b20100408034031 ch.epfl.lamp.sdt.feature.group Плагина Eclipse
Символ z внутри сопоставления с шаблоном не относится к z, который вы объявили снаружи, он вводит новую привязку переменной. Таким образом, первый случай будет соответствовать каждой возможной паре (привязка z к первому элементу пары и отбрасывание второго), а другие случаи никогда не будут достигнуты.
Если вы замените z
в шаблоне на
`z`
, он будет ссылаться на существующий z и не будет вводить новую привязку, поэтому он будет работать так, как вы предполагали. Вы также можете переименовать z в Z, если вам не нравится синтаксис с обратными кавычками.