Попытка создать список кортежей, показывающих кратность простого фактора ... идея состоит в том, чтобы сопоставить каждое целое число в отсортированном списке с первым значением в кортеже, используя второе значение для подсчета.Скорее всего, с 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
Почему это так, и почему компилятор не может справиться, если есть такое простое исправление?