Haskell交叉两个列表并删除双元素

时间:2014-03-18 11:54:35

标签: list haskell

我是Haskell的新手,需要一个函数来交叉两个列表,但是删除了双元素。

如果我加载Data.List

import Data.List

我可以使用这个功能:

intersect "abbcd" "abbe"
"abb"

结果是“abb”,但我需要的是:

   intersectFunction "abbcd" "abbe"
    "ab"

所以列表中的double char只能显示一次。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用您拥有的intersect功能,但之后需要删除重复的元素。似乎有一个库函数可以做到这一点,但是如果我们不知道这个名字怎么能找到呢?

回答“是否存在Haskell函数来执行X”形​​式的问题的最佳方法通常是:

  1. 找出你想要的函数的类型签名是什么。
  2. 在这种情况下,我们需要一个获取列表并生成列表的函数。所以类型签名是[a] - > [α]

    1. 搜索hooglehayoo。如果您没有找到它,请尝试另一个。通常,输入参数的顺序是否完全正确无关紧要,但您可能需要进行实验。
    2. 在这种情况下,该类型签名有很多功能。但是如果你转到结果的第二页,你会找到nub函数,它可以满足你的需要。

答案 1 :(得分:2)

也许名为 nub 的“唯一”函数可以提供帮助:

import Data.List

intersectFunction a b = nub $ intersect a b