我在執行函數時遇到了問題,該函數使用列表解析計算所有n> 1的斐波那契數列。我有很多來自OOP的經驗,我不是那種在功能上用於編程的人。但是下面你會發現我的代碼的功能我想實現:關於實現函數計算斐波那契數列的問題
fib :: Int -> Int
nextLast :: [Int]->Int
insert' :: [Int]->[Int]
retrieve :: [Int]->Int
goThrough :: Int->[Int]
fibl = [0,1] --List of edge cases to be used in the iteration
nextLast a = a !! (length a - 2)
insert' a = a ++ [last a + nextLast a] --How to create the pattern of Fibonacci series in a
retrieve a = let a = insert' a
in last a
goThrough n = replicate (n-1) 0
fib 0 = 0 --Edge case #1
fib 1 = 1 --Edge case #2
fib n = let times = goThrough n --n>1, n = any natural number
in last [retrieve fibl | _<-times]
我沒有得到編譯錯誤或類似的東西,但是當我運行這些代碼,然後什麼也沒有發生,它永遠不會終止。
有人可以解釋爲什麼發生這種情況,並最終建議解決這個問題?
在此先感謝!
請注意'last [x | _ < - times]'將_always_或者'x'(或者如果'times'爲空則錯誤)。列表理解將建立一個重複相同元素的列表。在純粹的函數式編程中沒有任何狀態在進行,因此用相同的參數多次調用相同的函數沒有意義。 – chi