我只是好奇Haskell中列表的一些确切的实现细节(GHC特定的答案很好) - 他们是天真的链接列表,还是他们有任何特殊的优化?进一步来说:
length和(!!)(例如)必须遍历列表?length两次,它是否必须迭代两次)?fib = 1:1:zipWith (+) fib (tail fib),是否会递归计算每个值,还是依赖于先前的计算值?)任何其他有趣的实施细节将不胜感激.提前致谢!
刚刚开始重新学习Haskell(在大学做过,但忘了大部分)并且认为我会实现一个斐波那契函数来开始.但是,我不断得到一个stackoverflow,即使是非常小的n.
有人能发现我的功能有什么问题吗?
fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n+1)
Run Code Online (Sandbox Code Playgroud)