[英]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.