-2
如何爲兩個列表或集合的聯合編寫函數式程序?函數式編程函數
如何爲兩個列表或集合的聯合編寫函數式程序?函數式編程函數
它依賴於語言,但通常會有一個遞歸解決方案,涉及遍歷集合標識共享元素。
例如在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
這聽起來像一個家庭作業的問題,但我會咬。在Python中:
lambda x, y: x + filter(lambda z: z not in x, y)
python'functional'? – KevinDTimm 2011-04-28 20:30:32
我不會這麼說,但你可以在其中編寫功能代碼。 :) – jalf 2011-04-28 20:34:21
同意。它不是Haskell或F#意義上的純函數,但它對功能範式有一定的支持。 – 2011-04-28 20:46:01