在Haskell wiki I read that this:“浮出”是什么意思?
fib =
let fib' 0 = 0
fib' 1 = 1
fib' n = fib (n - 1) + fib (n - 2)
in (map fib' [0 ..] !!)
的效率比该:
fib x =
let fib' 0 = 0
fib' 1 = 1
fib' n = fib (n - 1) + fib (n - 2)
in map fib' [0 ..] !! x
因为,“在用于每个参数x被(重新)限定的第二壳体FIB”,因而它不能被漂走了。“
我不明白这是什么意思。
- “浮出”是什么意思?它是如何优化?
- 为什么
fib'
被重新定义为每次调用fib
? - 这是一个eta扩展与否?
这个答案和Daniel Fischer的答案现在是相互递归的。 – misterbee 2012-02-22 23:20:45
@misterbee:幸运的是,只有Haskell程序员会阅读它们,而我们很懒,对吧? – leftaroundabout 2012-03-23 12:57:19