Haskell 中的斐波那契数列 - 只有 return 值不超过用户输入值 NOT index

Fibonacci Sequence in Haskell - only return values up to a user input value NOT index

我见过很多 Haskell 程序,当用户输入 5 时,它会 return 斐波那契数列的前 5 个元素,但是,我需要它只输出斐波那契数列的值小于或等于 5 的序列。

例如: Fib 15需要输出 1 1 2 3 5 8 13

Fib 7需要输出 1 1 2 3 5

这就是我所拥有的并且正在尝试更改以输出给定值而不是给定索引:

    -- individual fib numbers
    fib :: Int -> Int
    fib 0 = 1
    fib 1 = 1
    fib n = fib (n - 1) + fib (n - 2)

    -- example run fib 6 returns the int at position 6 
    -- so fib 6 = 13


    -- combines individual fib numbers
    fibonacciSequence x = map fib[1..x]

我尝试过的一些事情:

    fibonacciSequence x = map (\x -> fib[1..] > x ) [1..]

    y = filter (\y -> y > x) fib[1..x]

    fibonacciSequence x = map (inRange (1,x)) [1..]

    fibonaci g = map fst (iterate f (0,1)) where f (x,y) = (y,x+y) | f(y, x+y) <= g

我是 Haskell 的新手,非常感谢您的帮助!

而不是像这样编写生成有限序列的函数:

fibonacciSequence x = map fib [1..x]

写成无限序列往往更有用:

fibonacciSequence = map fib [1..]

然后您可以自由选择您想要的部分,对于前 n 个您可以使用的元素:

take n fibonacciSequence

如果您想要高达 n 的斐波那契数列,您可以这样做:

takeWhile (<= n) fibonacciSequence