www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

Landei

Gepostet:
24.04.2011 20:25

count  
Ich habe festgestellt, dass ich recht häufig length $ filter ... verwende, um zu zählen, wie oft ein Prädikat in einer Liste zutrifft. Mit Hoogle habe ich keine entsprechende Funktion gefunden. Ich habe die Funktion dann (auch in Hinblick auf ordentliche Performance) so implementiert:


import Data.List

count :: (a -> Bool) -> [a] -> Int
count f xs = foldl\' (\\n x -> if f x then n+1 else n) 0 xs


Geht das so in Ordnung, oder gibt es eine bessere Variante?
Zum Seitenanfang    
 
Landei

Gepostet:
09.05.2011 16:29

   
Ah, Bool ist ein Enum...


count :: (a -> Bool) -> [a] -> Int
count f = foldl\\\' (flip $ (+).fromEnum.f) 0


Das ginge auch, würde aber eine neue Liste aufbauen:

count :: (a -> Bool) -> [a] -> Int
count f = sum . fmap (fromEnum . f)
Zum Seitenanfang