相关疑难解决方法(0)

如何编写通用memoize函数?

我正在编写一个函数来查找三角形数字,并且以递归方式编写它的自然方式:

function triangle (x)
   if x == 0 then return 0 end
   return x+triangle(x-1)
end
Run Code Online (Sandbox Code Playgroud)

但是尝试计算前100,000个三角形数字会在一段时间后出现堆栈溢出而失败.这是一个理想的memoize函数,但我想要一个能够记忆我传递给它的任何函数的解决方案.

optimization recursion lua closures memoization

11
推荐指数
4
解决办法
7439
查看次数

有没有办法在Haskell中记忆一个值?

我在Haskell中有以下功能:

memdb = -- load the contents of a database into memory as a Map
Run Code Online (Sandbox Code Playgroud)

然后我有以下几行:

map (\x -> memdb ! x) values
Run Code Online (Sandbox Code Playgroud)

我想memdb只生成一次Map,而不是每次迭代生成Map map.我可以用这样的东西做到这一点:

make_memdb = -- equivalent to memdb in previous example
memdb <- make_memdb
map (\x -> memdb ! x) values
Run Code Online (Sandbox Code Playgroud)

但这意味着我必须传递memdb给使用它的每个函数.有什么办法可以:

一个.避免memdb每次调用OR时重新计算

湾 将生成的值保存make_memdb为常量,以便我可以避免将其传递给使用它的每个函数?

haskell functional-programming memoization

6
推荐指数
1
解决办法
507
查看次数