我有一个关于在 Haskell 中使用数组实现缓存(记忆)的问题。以下模式有效:
f = (fA !)
where fA = listArray...
但这不是(程序的速度表明每次调用或其他东西都会重新创建数组):
f n = (fA ! n)
where fA = listArray...
在 where 子句之外(在“全局范围”中)定义 fA 也适用于任一模式。
我希望有人能指出我对上述两种模式之间区别的技术解释。
请注意,我使用的是最新的 GHC,我不确定这只是编译器的特性还是语言本身的一部分。
编辑: !用于数组访问,所以 fA !5 表示 C++ 语法中的 fA[5]。我对 Haskell 的理解是 (fA !) n 将与 (fA ! n) 相同......而且对我来说写“fn = fA ! n”(不带括号)会更传统。无论如何,无论我如何括号,我都会得到相同的行为。