The length command is too greedy. It wants to check the entire length of both lists, and only then compare. If you did this by hand, you would know to quit at the first nonequal element. To do this in Haskell, you should generally avoid "length". Lazier functions such as "and" stop as soon as they can:

and (map isEqual xs)

doesn't really map to every xs. The "and" keeps asking map to check the next element for equality, but stops asking when it gets a negative answer. length doesn't know to stop asking.

Dan

Alexteslin wrote:
What wrong with my original solution?

allEqual2 :: [Int] -> Bool
allEqual2 xs = length xs == length (filter isEqual xs)
        where
        isEqual n = (head xs) == n

It looks simpler to me


Dan Weston wrote:
The real lesson here is that

1) no problem is "too easy" to cheat good software engineering practices.
2) no solution not accompanied by at least a QuickCheck result should be viewed with suspicion

I obviously have to go back and relearn these lessons.

Dan

Jason Dagit wrote:
On 7/19/07, Jason Dagit <[EMAIL PROTECTED]> wrote:
On 7/19/07, Dan Weston <[EMAIL PROTECTED]> wrote:
Oops, you got me. I didn't even look at the third line, I just took it
from the previous post. My first instinct actually was to write:

allEqual x@(h:t) = and (zipWith (==) x t)
I prefer,

allEqual [] = True
allEqual xs = foldl1 (==) xs

But, unfortunately, it's not a one liner like yours (unless you allow
allEqual [] = undefined).
Oh and silly me, that only works for [Bool].

I'll hushup :)

Jason

but I don't think that zipWith is allowed in the question.

Dan


Antoine Latter wrote:
On 7/19/07, Dan Weston <[EMAIL PROTECTED]> wrote:
I would define:

allEqual []         = True
allEqual [_]        = True
allEqual (x1:x2:xs) = (x1 == x2) && allEqual xs
What does this function do for "allEqual [1, 1, 2]" ?

Antoine
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe



_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe




_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe





_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to