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

Ale*_*aro -3 haskell fibonacci

下来两个功能.一个计算一定数量的斐波那契,另一个尝试使用地图显示斐波纳契序列达到一定数量.当我键入斐波那契数字时会发生错误,例如斐波纳契8和抛出错误.我究竟做错了什么?

fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

fibonacci :: [Integer]
fibonacci = map fib [0..]
Run Code Online (Sandbox Code Playgroud)

AJF*_*mar 5

当你使用时fibonacci,你正在写:

> fibonacci 8
(error)
Run Code Online (Sandbox Code Playgroud)

但是,fibonacci :: [Integer]- fibonacci不是一个功能,你不能称之为!fibonacci是一个无限列表,因此您必须使用基于列表的操作来获取特定数字.

列表索引运算符是(!!) :: [a] -> Integer -> a,所以使用:

> fibonacci !! 8
21
Run Code Online (Sandbox Code Playgroud)

您还可以使用take :: Integer -> [a] -> [a]n个数字:

> take 8 fibonacci
[0,1,1,2,3,5,8,13]
Run Code Online (Sandbox Code Playgroud)

但是你可以这样做:

> fib 8
21
Run Code Online (Sandbox Code Playgroud)

因为fib :: Integer -> Integer 一个功能.