Фибоначчи Хаскелл - PullRequest
       10

Фибоначчи Хаскелл

1 голос
/ 04 декабря 2011

Я начинаю «новый» алгоритм Фибоначчи, но он не работает. Все очень просто:

    --fiblista 0 n = [0]
    --fiblista 1 n = [1]
    fiblista a n 
        | a <= n = (0:1:tail, ((fiblista!!d)+(fiblista!!c))) fiblista a+1 n 
        where d = a - 1 
              c = a - 2

Пример:

http://dl.dropbox.com/u/27560194/example.png

Первый код ошибки: ошибка разбора на входе `= '

Есть идеи, как исправить этот алгоритм? Я прочитал тысячи примеров алгоритма Фибоначчи в haskell, но мне нужно написать новый.

1 Ответ

4 голосов
/ 04 декабря 2011

Ваш отступ неверен. Попробуйте:

fiblista 0 n = [0]
fiblista 1 n = [1]
fiblista a n 
    | a < n = (tail, ((fiblista!!d)+(fiblista!!c))) fiblista a+1 n 
  where d = a - 1 
        c = a - 2

Но этот код все равно не скомпилируется. fiblista - это функция с двумя параметрами, но вы также пытаетесь использовать ее как список. Вы также пытаетесь использовать кортеж как функцию.

Если вы все еще застряли в написании своей функции, было бы полезно, если бы вы могли описать, каковы параметры для fiblista и что она должна возвращать. Включите подпись типа.

Это домашнее задание?


Зв

fiblista a n представляет собой список чисел Фибоначчи, начиная с a th числа Фибоначчи и заканчивая ( n -1) th число Фибоначчи.

Это вопрос списка.

Представьте, что у вас есть список всех чисел Фибоначчи . (Это будет то же самое, что и fiblista 0 ∞, если бы было допустимым значением Haskell.) Затем вы сможете использовать стандартные функции списка take и drop для расчета fiblista a n.

...