私の宿題は、最初のタプルの2番目の要素が2番目のタプルの最初の要素と同じである場合に、リスト内の2つのタプルをグループ化することです。次に、最初のタプルが(a, b)
で、2番目(b, c)
のタプルがである場合、タプル(a, c)
を結果リストに追加する必要があります。
1つのタプルを持つ要素と多くのタプルを持つ2番目のリストを取り、それぞれを比較する最初の関数を作成しました。
これは正しく機能します:
c1 = ("a","x")
d1 = [ ("x","b"), ("z","c"), ("x","b"), ("z","c")
, ("x","b"), ("z","c"), ("x","b"), ("z","c") ]
getByOne c1 a1 = filter (/=[])
[ if (fst (last(take n a1))) == (snd c1)
then [((fst c1), (snd (last(take n a1))))]
else [] | n <- [1..(length a1) ] ]
出力:
[ [("a","b")], [("a","b")], [("a","b")], [("a","b")] ]
しかし、問題は、if thenとelseステートメントが単純なタプルだけをスローできないことです。そのため、新しいリストを作成します。この「回避策」の最後に、リスト内のリストを取得しています。また、出力リストが大きい場合は、リスト内のリストが多くなります。
タプルまたは空のタプルのみを渡す方法はありますか、またはこれらのリストを何らかの方法でグループ化する必要がありますか?