2013-05-09 4 views
1

Я заблокирован со вчерашнего дня о ошибке несоответствия типа, и я не вижу, как ее исправить. Может быть, вы можете мне помочь.Ошибка несоответствия типа в Scala

def combine(head : (Char,Int), xs : Occurrences) : List[Occurrences] = 
xs.map { case (x,i) => for (occu <- 1 to head._2) yield List((x,i), (head._1, occu)) } 

Вот ошибка, я получаю:

type mismatch; 
found : List[scala.collection.immutable.IndexedSeq[List[(Char, Int)]]] 
required: List[forcomp.Anagrams.Occurrences] 

Тип Occurrences определяется как type Occurrences = List[(Char, Int)]

Как я могу исправить эту ошибку?

ответ

4

Вы можете решить вашу проблему, используя flatMap, которая будет конкатенировать (сгладить) списки для вас.

def combine(head : (Char,Int), xs : Occurrences) : List[Occurrences] = 
    xs.flatMap { case (x,i) => (1 to head._2).map(occu =>List((x,i), (head._1, occu))) } 

Теперь для каждого это будет вхождение составить список, который имеет (x,i) кортеж и (head._1, occu) кортеж и все списки будут в основном быть ++ «d вместе с flatMap.

Обратите внимание, что я слепо конвертирую ваш код, так как знаю, что это домашняя работа, поэтому я не буду пытаться анализировать, правильно ли алгоритм.

+0

Не беспокойтесь, основываясь на вашем ответе, я наконец нашел решение. Спасибо – Dimitri

+0

Рад это слышать! – coltfred

1

Проблема в том, что для каждого члена Occurrences вы получаете список - так что вы получаете что-то вроде List[List[Occurrences]]. Я думаю, вы могли бы использовать flatMap вместо map, который сгладит список.

+0

Спасибо за ваш ответ. Я забыл flatMap! – Dimitri

Смежные вопросы