On Feb 12, 2007, at 11:02 AM, [EMAIL PROTECTED] wrote:

Hello,

the "Advanced Monads" page in the Haskell Wikibook
(http://en.wikibooks.org/wiki/Haskell/Advanced_monads) contains the following
example of a List Monad

pythags = do
        x <- [1..]
        y <- [x..]
        z <- [y..]
        guard (x^2 + y^2 == z^2)
        return (x, y, z)

However, whenever you load that function definition into Hugs or GHCi, you get a
message saying that "guard" is an undefined variable.

Does anyone know why?

Thanks.

phiroc


Another note about this function -- it doesn't actually work. It will forever try increasing values of z, trying to find a z such that z^2 = 1^2 + 1^2, and no such z exists. The following function, however, does seem to correctly generate all the Pythagorean triples.


pythags = do
   z <- [1..]
   x <- [1..z]
   y <- [x..z]
   guard (x^2 + y^2 == z^2)
   return (x,y,z)






Rob Dockins

Speak softly and drive a Sherman tank.
Laugh hard; it's a long way to the bank.
          -- TMBG



_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to