В настоящее время я смотрел на эту функцию в Haskell, который возвращает число Фибоначчи на позиции n
Как Haskell оценивает функцию Фибоначчи?
fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
Теперь он собирает, возвращает правильный результат и все ... но я не вижу, как Haskell оценивает это функция.
Не Haskell всегда ищет подходящее определение, а затем применяет это определение до тех пор, пока оно больше не может (например, достигло базового случая)?
В этом случае это то, что я придумал. Например, оценка fib 3
fib n = fib (n-1) + fib (n-2)
fib 3 = fib (3-1) + fib (3-2)
fib 3 = fib ((3-1)-1) + fib ((3-1)-2) + fib ((3-2)-1) + fib ((3-2)-2)
fib 3 = fib (((3-1)-1)-1) + fib (((3-1)-1)-2) +
fib (((3-1)-2)-1) + fib (((3-1)-2)-2) +
fib (((3-2)-1)-1) + fib (((3-2)-1)-2) +
fib (((3-2)-2)-1) + fib (((3-2)-2)-2)
...
Это может продолжаться вечно, не давая фактический результат. Однако Haskell возвращает результат. Так что я делаю неправильно?
спасибо, часть 'будет применяться только тогда, когда предыдущие строки не apply' дали понять мне – user2426316