4
我打电话被记录为clojure.core /时间我需要做一些特殊的事情来使用clojure.core/time?
如“的计算EXPR并打印花时间返回expr的值。”:
(time (expensive))
Macroexpanding它表明,它确实将值存储为let,以便在输出时间后立即返回let表达式中的值。
当我通过昂贵的计算器进行通话时,会看到延迟,然后返回时间,但必须等待显着的时间(有时为+10秒或更长)才能显示结果。
任何人都可以解释这里发生了什么? PS:这是使用clojure 1.3.0,如果这有什么不同。
这几乎是一个懒惰的问题。之前我问过一个问题,我正在分析一个手术,起初手术时间很短。然后我意识到,直到后来它才真正被计算出来。如果你想返回结果,那么正确的语法可能是(time(doall(comput))),如果你不想返回结果和(time(dorun(calculate)))。 –
如果是这种情况,为什么不包含doall?人们会认为,如果你计算一些你想知道它实际需要多长时间的东西? – toofarsideways
你正在测量你正在做什么的时间:构建一个懒惰的seq,而不是消耗懒惰seq的所有元素(如果这就是你正在做的事情,但我没有你的细节)。 “明确你想要什么”是一个比隐式doall更灵活的设计。这是我能想到的一个原因,虽然我没有设计“时间”;)。 –