开发者

Haskell: How to get rid of doubled or tripled elements in a list

Objective: Finding the permutation of a list such as ["abc", "bc", "acc"]

Problem: My permutation contains doubled and tripled elements and I want to get rid of those elements.

The result that I obtained from the list above is :

[["abc","bc","acc"],["abc","bc"],["abc","acc","bc"],["abc","acc"],["abc","acc"],["abc"],["bc","abc","acc"],["bc","abc"],["bc","acc","abc"],["bc","acc"],["bc","acc"],["bc"],["acc","abc","bc"],["acc","abc"],["acc","bc","abc"],["acc","bc"],["acc","bc"],["acc"],["bc","acc"],["bc"],["acc","bc"],["acc"],["acc"],[]]

The code that I wrote in order to get rid of those doubled elements is stated below:

fct开发者_如何学运维 [] = []
fct (xs)
    | (head xs) `elem` xs = fct (delete (head xs) xs)
    | otherwise = fct xs 

Here I wanted to take the first element of the list and compare it with the rest of the list. Can you help me to find a solution to my problem.


Those are not permutations, because some of them don't contain all the original elements. It seems to be a combination of permutations and selections.

In ghci:

Prelude Data.List Control.Monad> concatMap permutations $ filterM (const [False, True])["abc", "bc", "acc"]
[[],["acc"],["bc"],["bc","acc"],["acc","bc"],["abc"],["abc","acc"],["acc","abc"], ["abc","bc"],["bc","abc"],["abc","bc","acc"],["bc","abc","acc"],["acc","bc","abc"],["bc","acc","abc"],["acc","abc","bc"],["abc","acc","bc"]]


You can use the function nub to remove duplicates from a list.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜