检查两个列表是否具有相同的元素

时间:2014-06-01 10:20:17

标签: haskell

如果两个列表具有相同的元素,即使它们没有以相同的顺序出现,我尝试编写一个给定两个列表的函数返回一个布尔响应。我有这样的事情:

function :: [a] -> [a] -> Bool
function (x:xs) y = elem x y && function xs y

这个问题是当xs为空时没有模式,我不知道如何处理这种情况。任何其他解决方法都非常受欢迎,我对Haskell很新。

全部谢谢!

3 个答案:

答案 0 :(得分:6)

这也适用

import Data.List

function :: (Eq a) => [a] -> [a] -> Bool
function x y = null (x \\ y) && null (y \\ x)

答案 1 :(得分:2)

使用条款:

function [] y = True

空列表的所有元素都在列表y中。

答案 2 :(得分:0)

您的函数仅检查一个列表是否是另一个列表的子集。您可以在两个方向上应用它来检查列表是否具有完全相同的元素:

contains [] y = True
contains (x:xs) y = elem x y && contains xs y

equals x y = contains x y && contains y x

请注意,对于包含重复项的列表,这可能效果不佳。