www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Xan

Gepostet:
21.07.2012 16:48

aus einer Liste xs alle Elemente entfernen, die sich in der Liste ys befinden?  
Hallo,
z.B. xs =[6,3,9,0,5,8] und ys = [6,3,0,2,1] => [9,5,8]
mein code

entfernen :: [Integer] -> [Integer] -> [Integer]
entfernen xs ys = [ x | x <- xs, y <- ys , x/=y]

Aber leider hier kommt raus
Main> entfernen [6,3,9,0,5,8] [6,3,0,2,1]
[6,6,6,6,3,3,3,3,9,9,9,9,9,0,0,0,0,5,5,5,5,5,8,8,8,8,8]
Zum Seitenanfang    
 
Landei

Gepostet:
21.07.2012 20:06

   

entfernen :: [Integer] -> [Integer] -> [Integer]
entfernen xs ys = filter (`notElem` ys) xs


Oder wenn es eine Comprehension sein soll:

entfernen :: [Integer] -> [Integer] -> [Integer]
entfernen xs ys = [x | x <- xs, x `notElem` ys]
Zum Seitenanfang    
 
Xan

Gepostet:
21.07.2012 22:30

   
Vielen Dank. Es hat mir sehr geholfen. Auf `notElem`würde ich nie selber kommen.
Zum Seitenanfang    
 
Landei

Gepostet:
22.07.2012 13:01

   
Man kann (ziemlich ineffizient) das Ergebnis auch aus deiner Version extrahieren:


import Data.List

entfernen xs ys = map head $ filter (((length ys)==) . length) $ group [ x | x <- xs, y <- ys , x/=y]


An dieser Stelle würde ich das nicht empfehlen, aber das grundlegende Schema map - [filter] - group[By] ist oft nützlich.
Zum Seitenanfang