要获得两个列表的对称差,我认为使用列表推导式是一个好主意。但我不知道该如何去除列表中共同的元素,并获取不同的元素。
例如
symDiff [1,2,3,4] [1,3,5] -- should return [2,4,5].
到目前为止,我已经
symDiff :: [a] -> [a] -> [a]
symDiff xs ys =
要获得两个列表的对称差,我认为使用列表推导式是一个好主意。但我不知道该如何去除列表中共同的元素,并获取不同的元素。
例如
symDiff [1,2,3,4] [1,3,5] -- should return [2,4,5].
到目前为止,我已经
symDiff :: [a] -> [a] -> [a]
symDiff xs ys =
希望这能有所帮助,但是我无法在不使用Eq a
的情况下完成。
symDiff :: Eq a => [a] -> [a] -> [a]
symDiff setA setB = [c | c <- setA, not $ (elem c [x | x <- setB])]
++ [c | c <- setB, not $ (elem c [x | x <- setA])]
对于
symDiff [1,2,3,4] [1,3,5]
将返回:[2,4,5]
filter
。 - Willem Van Onsemsymmdif a b = (dif a b)
?可能不是。symmdif a b = (dif b a)
?也不太可能。symmdif a b = one ++ two where ....
,也许是这样?那么one
和two
是什么? - Will Ness