【发布时间】:2012-12-04 06:30:43
【问题描述】:
这是受到 Radul 和 Sussman 的“传播者艺术”论文的启发:
http://web.mit.edu/~axch/www/art.pdf
当他们构建compound progator 时,他们会说:
复合传播器是通过一个过程来实现的,该过程将按需构建传播器的主体。我们注意它只有在某个邻居确实有值时才被构造,并且它只被构造一次
第10页的代码是:
(定义(要构建的复合传播器邻居) (让((完成?#f)(邻居(列出邻居))) (定义(测试) (如果完成了? '行 (如果(什么都没有?(地图内容邻居)) '行 (开始(设置!完成?#t) (建造))))) (传播者邻居测试)))我们如何使用 clojure 的持久数据结构来做到这一点?
这可能是一个简化版本:
(def m {:a (delayed (some-object-constructor))})
(:a m) 在第一次调用时构造对象并给出
然后对(:a m) 的后续调用将访问该对象。
它有点像 memoize,但基于值而不是函数..
【问题讨论】:
标签: clojure