Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 检查两个列表是否具有相同的元素_Haskell - Fatal编程技术网

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)。在我的评论中,我假设两个列表都有非重复元素。尽管如此,我的解决方案仍然适用于重复的元素,只要两个列表中的每个元素都以相同的数量重复。