簡體   English   中英

沒有顯式遞歸的兩個列表的並集和相交

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM