2017-12-22 2 views
3

Ich bin ein Anfänger zu Haskell. Ich möchte zwei Listen von Strings vergleichen und die gemeinsamen Elemente zwischen den Listen entfernen und eine neue Liste mit eindeutigen Elementen zurückgeben.Wie entfernt man die gemeinsamen Elemente zwischen zwei Listen von Strings in Haskell?

Unten finden Sie den Code, den ich habe:

Prelude Data.List> let list_1 = ["apple", "orange", "apple"] 
Prelude Data.List> let list_2 = ["apple"] 
Prelude Data.List> let removeCommonWords xs ys = filter (\x -> x `elem` ys) xs 
Prelude Data.List> removeCommonWords list_1 list_2 

Ausgabe des obigen Code:

["apple","apple"] 

Derzeit ist die filter Funktion die gemeinsamen Wörter filtert und eine neue Liste der Rückkehr, dass die enthält gebräuchliche Worte. Ich möchte jedoch, dass es eine neue Liste zurückgibt, die die eindeutigen Wörter enthält. Ich denke, ich brauche einen neuen Regex-Ausdruck für die Filterfunktion.

Erwarteter Ausgang:

["orange"] 

ich auch versucht, die folgenden:

Prelude Data.List> let removeCommonWords xs ys = filter (\x -> x `elem` ys) xs 
Prelude Data.List> remove ["orange", "apple", "apple"] "apple" 

Die Ausgabe des obigen Codes ist:

["orange"] 

Allerdings möchte ich zwei Listen vergleichen von Strings - keine Liste und String.

Antwort

3

denke ich, dass das, was Sie wollen

let removeCommonWords xs ys = filter (\x -> not (x `elem` ys)) xs 

bearbeiten:

let removeCommonWords xs ys = filter (\x -> x `notElem` ys) xs 
+0

:) Danke es hat funktioniert. –

+0

Gern geschehen. – andrewnagyeb

+1

Es gibt auch die 'notElem'-Funktion. – 4castle

2

Innerhalb Data.List gibt es drei Funktionen, die Sie tun, was: Sie auch notElem direkt als verwenden können versuche mit Filtern zu erreichen.

intersect :: Eq a => [a] -> [a] -> [a] macht genau das, was removeCommonWords in Ihrem Code tut. intersect list_1 list_2 wird ["apple","apple"] produzieren.

nub :: Eq a => [a] -> [a] kombiniert mit (\\) :: Eq a => [a] -> [a] -> [a] wird Ihnen das Gegenteil geben. nub list_1 \\ nub list_2 wird ["orange"] produzieren.

diese Funktionen auf Hoogle Schauen Sie sich für weitere Details

Verwandte Themen