2011-04-28 3 views

Répondre

1

Cela dépend de la langue, mais généralement, il y aura une solution récursive impliquant la traversée des ensembles identifiant les éléments partagés.

E.g. en Haskell sur le type Data.Set natif,

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 

Ou plus simplement, pour les listes:

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

Cela ressemble à une question de devoirs, mais je vais mordre. En Python:

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

est-ce que python est 'fonctionnel'? – KevinDTimm

+0

Je ne le dirais pas, mais vous pouvez y écrire du code fonctionnel. :) – jalf

+0

D'accord. Ce n'est pas purement fonctionnel dans le sens de Haskell ou F #, mais il a un certain soutien pour le paradigme fonctionnel. –

Questions connexes