[Haskell-beginners] homogeneous value list

Daniel Fischer daniel.is.fischer at web.de
Fri Mar 12 09:31:54 EST 2010


Am Freitag 12 März 2010 15:25:48 schrieb Salil Wadnerkar:
> On Fri, Mar 12, 2010 at 10:21 PM, Ozgur Akgun <ozgurakgun at gmail.com> 
wrote:
> > Another boring variant from me then.
> >
> > isHomogeneous xs = all (first==) xs
> >     where first = head xs
>
> Shouldn't
> head xs
> give an exception on an empty list?

Only if it's demanded, which it isn't here, since all doesn't look at the 
condition when facing an empty list.

But it's good practice to never call head on a list which may be empty, so 
I wouldn't like Ozgur's variant in real code. It's great for golf, though 
:D

>
> > Guess what? You do not need the special case for [], because "all _ []
> > = True" allways. So if the list is empty, it won't even try evaluating
> > "first".
> >
> > Cheers,
> >
> > On 12 March 2010 14:08, Daniel Fischer <daniel.is.fischer at web.de> 
wrote:
> >> Am Freitag 12 März 2010 14:41:11 schrieb Daniel Fischer:
> >> > isHomogeneous :: Eq a => [a] -> Bool
> >> > isHomogeneous [] = True
> >> > isHomogeneous (x:xs) = all (== x) xs
> >>
> >> Variant, getting rid of the special case for an empty list:
> >>
> >> isHomogeneous :: Eq a => [a] -> Bool
> >> isHomogeneous xs = and (zipWith (==) xs (drop 1 xs))



More information about the Beginners mailing list