Требуется стабильный идентификатор при сопоставлении с образцом? (Scala)

Попытка создать список кортежей, показывающий кратность простого множителя ... идея состоит в том, чтобы сопоставить каждое целое число в отсортированном списке с первым значением в кортеже, используя второе значение для подсчета. Возможно, проще было бы сделать это с помощью takeWhile , но мех. К сожалению, мое решение не компилируется:

  def primeFactorMultiplicity (primeFactors: List[Int]) = {

    primeFactors.foldRight (List[(Int, Int)]()) ((a, b) => (a, b) match {
      case (_, Nil)       => (a, 1) :: b
      case (b.head._1, _) => (a, b.head._2 + 1) :: b.tail
      case _              => (a, 1) :: b
    })
  }

В нем говорится: «Ошибка: требуется стабильный идентификатор, но найден b.head._1». Но изменение второй строки case на следующее работает нормально:

      case (i, _) if (i == b.head._1) => (a, b.head._2 + 1) :: b.tail

Почему это так и почему компилятор не справляется, если есть такое простое исправление?

10
задан Luigi a.k.a. Rhys 26 June 2011 в 13:36
поделиться