上下文:
Run Code Online (Sandbox Code Playgroud)def fib(n): if n < 2: return 1 return fib(n-1) + fib(n-2)可以通过记忆加速:
Run Code Online (Sandbox Code Playgroud)fib_memo = {} def fib(n): if n < 2: return 1 if not fib_memo.has_key(n): fib_memo[n] = fib(n-1) + fib(n-2) return fib_memo[n]这种记忆化的实现技术在许多编程语言中被广泛使用,但它不能直接应用于 Haskell,因为 Haskell 是纯的,我们不想为了记忆一个函数而引入杂质。幸运的是,由于 Haskell 的惰性求值特性,可以在没有副作用的情况下记住一个函数。
以下
memoize函数采用类型函数Int -> a并返回同一函数的记忆版本。诀窍是将函数转换为值,因为在 Haskell 中,函数不会被记忆,但值会被记忆。
问题:
haskell functional-programming memoization lazy-evaluation pure-function