2011-04-28 3 views

답변

1

언어에 따라 다르지만 일반적으로 공유 요소를 식별하는 세트를 순회하는 재귀 적 솔루션이 있습니다.

예.

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 

또는 더 간단하게,리스트를 들어, 기본 Data.Set 유형에 하스켈 :

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

이 숙제 질문처럼 들리 겠지만 나는 물린 것이다. 파이썬에서 :

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

은 python 'functional'입니까? – KevinDTimm

+0

나는 그렇게 말하지 않겠지 만 기능적 코드를 작성할 수 있습니다. :) – jalf

+0

동의. 그것은 Haskell이나 F #의 의미에서 순전히 기능적이지는 않지만, 기능적 패러다임을 지원합니다. –

관련 문제