[Haskell-cafe] Efficiency question

2007-05-30 Thread Evil Bro

I'm pretty new to Haskell, so forgive me if my question is due to my
non-functional way of thinking...

I have the following code:

module Main where

main = print solution

solution = solve 100

solve d = countUniqueFractions d 2 1 0

canBeSimplified (a,b) = gcd a b  1

countUniqueFractions stopD currentD currentN count | currentD  stopD =
count
   | currentN == currentD =
countUniqueFractions stopD (currentD + 1) 1 count
   | canBeSimplified
(currentN, currentD) = countUniqueFractions stopD currentD (currentN+1)
count
   | otherwise =
countUniqueFractions stopD currentD (currentN+1) (count + 1)

When I run this code, I get a stack overflow. I don't understand why. Could
anyone explain please?
-- 
View this message in context: 
http://www.nabble.com/Efficiency-question-tf3823154.html#a10823572
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

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


Re: [Haskell-cafe] Efficiency question

2007-05-30 Thread Evil Bro

 Counting can be done elegantly by 'filter' and 'length':
I figured out the following code after posting:

solve d = length [(y,x) | x - [2..d], y - [1..(x-1)], gcd x y == 1]
main = print (solve 100)

However when running it, it gave an answer of -1255316543. How on earth can
a length be negative?

 length $ filter (1) $ Monad.liftM2 gcd [2..1000] [2..1000]
Thanks... now I'll just have to figure out what it does and why it does what
it does.


-- 
View this message in context: 
http://www.nabble.com/Efficiency-question-tf3823154.html#a10873232
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

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