I’m currently stuck on setting upper limits in list comprehensions.
What I’m trying to do is to find all Fibonacci numbers below one million.
For this I had designed a rather simple recursive Fibonacci function
fib :: Int -> Integer
fib n
n == 0 = 0
n == 1 = 1
otherwise = fib (n-1) + fib (n-2)
The thing where I’m stuck on is defining the one million part. What I’ve got now is:
[ fib x | x <- [0..35], fib x < 1000000 ]
This because I know that the 35th number in the Fibonacci sequence is a high enough number.
However, what I’d like to have is to find that limit via a function and set it that way.
[ fib x | x <- [0..], fib x < 1000000 ]
This does give me the numbers, but it simply doesn’t stop. It results in Haskell trying to find Fibonacci numbers below one million further in the sequence, which is rather fruitless.
Could anyone help me out with this? It’d be much appreciated!
The check
fib x < 1000000in the list comprehension filters away thefib xvalues that are less than 1000000; but the list comprehension has no way of knowing that greater values ofximply greater value offib xand hence must continue until allxhave been checked.Use
takeWhileinstead: