2011-04-28 65 views

回答

1

它依賴於語言,但通常會有一個遞歸解決方案,涉及遍歷集合標識共享元素。

例如在Haskell在本機Data.Set類型,

union :: Ord a => Set a -> Set a -> Set a 
union Tip t2 = t2 
union t1 Tip = t1 
union t1 t2 = hedgeUnion (const LT) (const GT) t1 t2 

hedgeUnion _  _  t1 Tip 
    = t1 
hedgeUnion cmplo cmphi Tip (Bin _ x l r) 
    = join x (filterGt cmplo l) (filterLt cmphi r) 
hedgeUnion cmplo cmphi (Bin _ x l r) t2 
    = join x (hedgeUnion cmplo cmpx l (trim cmplo cmpx t2)) 
      (hedgeUnion cmpx cmphi r (trim cmpx cmphi t2)) 
    where 
    cmpx y = compare x y 

或者更簡單地說,對於清單:

unionBy     :: (a -> a -> Bool) -> [a] -> [a] -> [a] 
unionBy eq xs ys  = xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs 
0

這聽起來像一個家庭作業的問題,但我會咬。在Python中:

lambda x, y: x + filter(lambda z: z not in x, y) 
+0

python'functional'? – KevinDTimm 2011-04-28 20:30:32

+0

我不會這麼說,但你可以在其中編寫功能代碼。 :) – jalf 2011-04-28 20:34:21

+0

同意。它不是Haskell或F#意義上的純函數,但它對功能範式有一定的支持。 – 2011-04-28 20:46:01