【发布时间】:2012-11-23 21:49:24
【问题描述】:
我很难理解惰性工作以及缓存是如何工作的。
我认为工作中的惰性序列的分步示例可以在这里真正提供帮助。例如我读过以下问题:
但还不清楚。
我的问题是调用如何确定另一个调用是否“等于”缓存调用以及它在缓存中保留多长时间?我试图 (source lazy-seq) 但显然它在 Java 领域,所以我在这里不走运。
对于一个简单的惰性序列,只取一个参数(比如说两个幂的列表),如果我用 5 和 8 调用它会怎样?只是这两个值被缓存了吗?
如果我要通过缓存已经调用惰性函数的每个输入来破坏内存,那么创建和缓存无限列表以获得无限结构的意义何在?
因为它说它会在每次后续调用时缓存结果...使用 's'。
1: 参数结果为 '1' 缓存 2: 参数结果为 '2' cached 3: 参数被 '3' 缓存的结果... 230: I 数到 230,这很好,因为我很懒惰,但现在 内存中有一个 2**30 缓存,缓存所有以前的所有调用 随后的调用。
还是只是缓存的最后一个调用?
如果我编写一个以树为参数的惰性函数会怎样?它是否在传递的参数上运行 equals? 以了解是否需要进行新的评估?
可以在运行时以某种方式跟踪这种行为吗?
【问题讨论】:
标签: clojure equals lazy-evaluation