Haskell 检查两个列表是否具有相同的元素
我试图编写一个函数,其中给定两个列表,如果两个列表具有相同的元素,即使它们的显示顺序不同,也会返回一个布尔值。我有这样的想法:Haskell 检查两个列表是否具有相同的元素,haskell,Haskell,我试图编写一个函数,其中给定两个列表,如果两个列表具有相同的元素,即使它们的显示顺序不同,也会返回一个布尔值。我有这样的想法: function :: [a] -> [a] -> Bool function (x:xs) y = elem x y && function xs y 问题是当xs为空时没有模式,我不知道如何处理这种情况。任何其他解决这个问题的方法都是非常受欢迎的,我对Haskell是个新手 谢谢大家 使用以下子句: function [] y = Tr
function :: [a] -> [a] -> Bool
function (x:xs) y = elem x y && function xs y
问题是当xs为空时没有模式,我不知道如何处理这种情况。任何其他解决这个问题的方法都是非常受欢迎的,我对Haskell是个新手
谢谢大家 使用以下子句:
function [] y = True
空列表的所有元素都在列表中y
这也适用
import Data.List
function :: (Eq a) => [a] -> [a] -> Bool
function x y = null (x \\ y) && null (y \\ x)
函数只检查一个列表是否是另一个列表的子集。您可以在两个方向上应用它来检查列表是否具有完全相同的元素:
contains [] y = True
contains (x:xs) y = elem x y && contains xs y
equals x y = contains x y && contains y x
请记住,这可能不适用于具有重复项的列表。我编写了函数,因此该子句不起作用,并在这里询问时获得正确的方法。现在感觉好笨啊,谢谢,真的!!无法正确处理重复项,并且存在其他问题(请参阅问题注释)。不要将解决方案添加为编辑-回答您自己的问题。提示:如果您评估
为[1,2,1][1,2,3]
,会发生什么?如果您对任何现有答案都不满意,您可以将自己的答案发布为对该问题的回答,然后将其标记为已接受。这有助于来自谷歌的用户。这是错误的,例如function[1,2][1,2,3]
返回True
,但列表不相等!!正确答案是'function xs ys=null(xs\\ys)&&null(ys\\xs)。在我的评论中,我假设两个列表都有非重复元素。尽管如此,我的解决方案仍然适用于重复的元素,只要两个列表中的每个元素都以相同的数量重复。