Fibonacci secuence无法将预期类型“ a0-> t”与实际类型“ [Integer]”匹配

时间:2018-09-29 15:31:22

标签: haskell fibonacci

向下两个功能。一种计算特定数量的斐波那契数,另一种尝试使用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..]

1 个答案:

答案 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 一个函数。