以下のようにネストされたリストを想像してみてください。
["A","ABBA","ABABA"]
このリスト(この例では「A」)からシングルトン要素を削除し、そのシングルトン要素を含むリストをすべて削除する関数を作成したいと思います。
となることによって:
removeElems ["A","ABBA","CCC"] -> ["CCC"]
以下は、この問題を解決するための私の試みです。
badElements nested = concat $ filter (\c -> length c == 1) nested
removeElements nested = [c | c <- nested, u <- badElements nested, not $ any (==u) c]
これにより、次のように、複数のジェネレーターがネストされたリストを「循環」させるという奇妙な結果が生成されます。
["A","ABBA","C","BCCB"] --> ["A","A","ABBA","ABBA","C","C","BCCB","BCCB"]--> ["A","ABBA","C","BCCB"]
もう一つの例:
[[1],[1,2,3,4],[2],[5,6,7,8]] --> [5,6,7,8]