1

タイプの不一致エラーについて昨日からブロックされており、修正方法がわかりません。多分あなたはそれで私を助けることができます。

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

2 に答える 2

4

Lists を連結 (平坦化) する 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)すべてのリストは基本的に++flatMap によってまとめられます。

これは宿題であることを知っているので、盲目的にコードを変換していることに注意してください。アルゴリズムが正しいかどうかを分析しようとはしません。

于 2013-05-09T13:05:34.223 に答える
1

Occurrences問題は、あなたのメンバーごとに List が生成されることです。つまり、 List[List[Occurrences]]. リストを平坦化するflatMap代わりにwhich を使用するかもしれません。map

于 2013-05-09T12:59:43.483 に答える