0

私はタイプの葉のオブジェクトのリストを持っている.Iは葉のリストは重量によって順序付けされるように、葉のリストをフィルタリングして、新しい葉を挿入しようとしています(文字:のInt:シャア、重量)。と一覧[製品:新葉は、私はどのように2つの異なるリストフィルタの結果を無視できますか?

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = { 

    def orderedLeafList(freqs: List[(Char, Int)], leaves: List[Leaf]): List[Leaf] = { 
    freqs match { 
     //Problem on line below 
     case head::tail => orderedLeafList(tail, leaves.filter(_.weight < head._2) :: Leaf(head._1, head._2) :: leaves.filter(_.weight > head._2)) 
     case _ => leaves 
    } 
    } 
orderedLeafList(freqs, List()) 
} 

私は指定されたラインに乗る問題を反復処理していますペアのリストから値を型の不一致、予想一覧[Huffman.Leaf]、実際にされて取得しますSerializableを]私は短所にフィルタの結果をしようとします。私はフィルタの結果を無視することができますか?私はscalaを初めて使っていますが、関数型プログラミングを行っています。

答えて

1

二つのリストを連結する代わりに::の使用:::::List[X]Xを兼ね備えています。 List(List(leaf1, leaf2), leaf3, leaf4, leaf5)

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = { 

    def orderedLeafList(freqs: List[(Char, Int)], leaves: List[Leaf]): List[Leaf] = { 
    freqs match { 
     //Problem on line below 
     case head::tail => orderedLeafList(tail, leaves.filter(_.weight < head._2) ::: Leaf(head._1, head._2) :: leaves.filter(_.weight > head._2)) 
     case _ => leaves 
    } 
    } 
    orderedLeafList(freqs, List()) 
} 

理由は、あなたは奇妙なエラーメッセージは、実際List[Leaf]の先頭に単一の要素としてList[Leaf]を追加し、のようなものを得ることができるということであることを取得します。得られたタイプがProduct with SerializableLeafList[Leaf]の共通上位型です。

関連する問題