Я думаю, что запись fib (n+2) = ...
не работает и является синтаксической ошибкой. Вы можете использовать соответствие стиля "регулярное выражение" для параметров, таких как списки или кортежи:
foo (x:xs) = ...
где x - заголовок списка, а xs - остаток списка или
foo (x:[]) =
, который сопоставляется, если в списке остался только один элемент, который хранится в x. Даже сложные совпадения, такие как
foo ((n,(x:xs)):rg) = ...
возможно. Определения функций в haskell - это сложная тема, и есть много разных стилей, которые можно использовать.
Еще одна возможность - использование схемы «коммутационный шкаф»:
foo f x | (f x) = [x]
foo _ _ = []
В этом случае элемент "x" помещается в список, если выполняется условие (f x)
. В остальных случаях параметры f и x не интересны, и возвращается пустой список.
Чтобы исправить вашу проблему, я не думаю, что что-то из этого применимо, но почему бы не добавить определение функции catch-Остаток-значения-значения, например:
fib n = (fib (n - 1)) + (fib (n - 2))
Надеюсь, это поможет,
Оливер