[Haskell-beginners] Removing the biggest element from a list - maybe slow?

Lafras Uys lafras at aims.ac.za
Mon May 24 09:27:03 EDT 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> I want to remove the biggest element from a list:
> 
> withoutBiggest (x:xs) =
>   withoutBiggestImpl (biggest x xs) [] (x:xs)
>     where 
>       biggest :: (Ord a) => a -> [a] -> a  
>       biggest big [] = big
>       biggest big (x:xs) =
>         if x > big then
>           biggest x xs
>         else
>           biggest big xs
>       withoutBiggestImpl :: (Eq a) => a -> [a] -> [a] -> [a]
>       withoutBiggestImpl big before (x:xs) =
>         if big == x then
>           before ++ xs
>         else
>           withoutBiggestImpl big (before ++ [x]) xs
> 
> 
> Works, but I am a little concerned that this is
> slower than needed, because the list has to be iterated twice.
> 
> Can this be done faster?

import Data.List
init sort xs

or

import Data.List
delete (maximum xs) xs

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkv6fqcACgkQKUpCd+bV+ko55wCbB/AVbb9OhfGK5ObsAc4yxVFH
YigAnjudQlhBThF2IvUOjXFknAxBHUnN
=XuKY
-----END PGP SIGNATURE-----


More information about the Beginners mailing list