[英]Union and Intersection of Two Lists Without Explicit Recursion
我有两个功能应该在两个列表上工作。
unionB :: Eq a => [a] -> [a] -> [a]
intersectB :: Eq a => [a] -> [a] -> [a]
对于unionB
我有以下代码将采用两个列表的并集来执行此操作,而无需使用显式递归。
unionB :: Eq a => [a] -> [a] -> [a]
unionB xs ys = [xs] ++ [[y] | y <- ys]
对于intersectB
我有以下代码将采用两个列表的交集(计数的最小值)。 唯一的问题是我正在使用显式递归来执行此操作。 代码如下:
intersectB :: Eq a => [a] -> [a] -> [a]
intersectB (x:xs) list
| x `elem` list = x : intersectB xs list
| otherwise = intersectB xs list
除了不使用显式递归之外,有没有其他方法可以使用我的intersectB
函数的结构? (即在体内没有提及intersectB
?)
据我了解, intersectB
应该与unionB
作用相反。 我假设intersectB
看起来与unionB
看起来非常相似。
我不能使用任何进口。 我知道那里已经有导入了。
谢谢。
您的第一个功能应该是
unionB :: Eq a => [a] -> [a] -> [a]
unionB xs ys = xs ++ [y | y <- ys, not (elem y xs)]
第二个类似的形式
intersectB :: Eq a => [a] -> [a] -> [a]
intersectB xs ys = [y | y <- ys, elem y xs]
假设Bag a
与[a]
相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.