功能编程功能

时间:2011-04-28 20:12:50

标签: functional-programming

如何为两个列表或集合的联合编写函数式程序?

2 个答案:

答案 0 :(得分:1)

这取决于语言,但通常会有一个递归解决方案,涉及遍历识别共享元素的集合。

E.g。在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

答案 1 :(得分:0)

这听起来像是一个家庭作业问题,但我会咬人。在Python中:

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