向下两个功能。一种计算特定数量的斐波那契数,另一种尝试使用map显示多达一定数目的斐波那契数列。 当我键入斐波那契和一个数字(例如斐波那契8)时,会发生错误 并引发错误。我在做什么错了?
fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
fibonacci :: [Integer]
fibonacci = map fib [0..]
答案 0 :(得分:5)
使用fibonacci
时,您正在写:
> fibonacci 8
(error)
但是,fibonacci :: [Integer]
- fibonacci
不是函数,您不能调用它! fibonacci
是一个无限列表,,因此您必须使用基于列表的操作来获取特定数字。
列表索引运算符为(!!) :: [a] -> Integer -> a
,因此使用:
> fibonacci !! 8
21
您还可以使用take :: Integer -> [a] -> [a]
来获取第一个 n 个数字:
> take 8 fibonacci
[0,1,1,2,3,5,8,13]
您可以执行以下操作:
> fib 8
21
因为fib :: Integer -> Integer
是一个函数。