Защита Фибоначчи Не удалось сопоставить ожидаемый тип 'a0 -> t' с фактическим типом '[Integer]' - PullRequest
0 голосов
/ 29 сентября 2018

Вниз две функции.Один, который вычисляет число Фибоначчи от определенного числа, а другой, который пытается показать последовательность Фибоначчи до определенного числа, используя карту.Ошибка возникает, когда я набираю fibonacci и число, например 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..]

1 Ответ

0 голосов
/ 29 сентября 2018

Когда вы используете 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 - это функция.

...