首页 > 解决方案 > 在顶层,结果将保留在内存中

问题描述

我正在阅读https://www.packtpub.com/application-development/haskell-high-performance-programming这本书,目前,我正在尝试理解备忘录。

它显示了以下记忆功能:

fib_mem :: Int -> Integer
fib_mem = (map fib [0..] !!)
where fib 0 = 1
      fib 1 = 1
      fib n = fib_mem (n-2) + fib_mem (n-1)  

在书中,它说:

因此,如果 fib_mem 在顶层定义,结果将在程序本身的生命周期内持续存在内存中!

这是什么意思,在顶层定义?

标签: haskell

解决方案


“顶级”是“REPL”的同义词,或者如果您使用源代码文件,它是它的最外层范围——它是全局范围。

传统上,在 Lisp 中,加载源代码文件就像您通过在 REPL 中一一键入来执行其顶级语句一样。

另见:这个斐波那契函数是如何记忆的?


推荐阅读