www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

Landei

Gepostet:
09.04.2011 17:14

Testen, ob Listenelement genau einmal vorkommt  
Interessante Frage auf Stackoverflow: http://stackoverflow.com/questions/5600706/searching-through-list/5605750#5605750

Eine vorgeschlagene Lösung war


once :: (Eq a) => [a] -> a -> Bool
once xs x = (== 1) $ length $ filter (== x) xs


Das ist natürlich schlecht, denn es durchsucht immer die gesamte Liste (wegen der length-Funktion). Ich habe das hier vorgeschlagen:


once x = not . (\\xs -> null xs || x `elem` tail xs) . dropWhile (/= x)


Aber das erscheint mir unnötig kompliziert. Gibt es keine elegantere Lösung?
Zum Seitenanfang    
 
Siracusa

Gepostet:
09.04.2011 20:06

   
once :: Eq a => a -> [a] -> Bool
once x = (== [x]) . filter (== x)
Zum Seitenanfang    
 
Landei

Gepostet:
10.04.2011 15:15

   
Oh Mann, da habe ich mit Kanonen auf Spatzen geschossen. Und lazy ist deine Version auch. Vielen Dank, wieder was gelernt...
Zum Seitenanfang