如果两个列表具有相同的元素,即使它们没有以相同的顺序出现,我尝试编写一个给定两个列表的函数返回一个布尔响应。我有这样的事情:
function :: [a] -> [a] -> Bool
function (x:xs) y = elem x y && function xs y
这个问题是当xs为空时没有模式,我不知道如何处理这种情况。任何其他解决方法都非常受欢迎,我对Haskell很新。
全部谢谢!
答案 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
请注意,对于包含重复项的列表,这可能效果不佳。