我需要做一些特别的事情才能使用clojure.core / time吗?

时间:2011-12-08 13:38:56

标签: clojure

我正在调用clojure.core / time,记录为"评估expr并打印所花费的时间。返回expr"

的值

例如:

(time (expensive))

宏扩展它表明它确实将值存储为let,因此在输出时应该立即返回let表达式中的值。

当我通过昂贵的计算进行呼叫时,我看到延迟然后得到时间,但是必须等待很长时间(有时+10秒或更长时间)才能显示结果。

有人能解释一下这里发生了什么吗?

PS:这是使用clojure 1.3.0,如果这有任何区别。

1 个答案:

答案 0 :(得分:6)

也许你正在返回一些懒惰的东西,其中的元素只有在输入到REPL时才会产生?在这种情况下,您可能希望将其包装在dorun中,这会强制生成所有元素。

如果您可以提供昂贵计算的详细信息,我们可以看看是否属实。

来自Savanni D'Gerinel评论的有用补充:

如果要返回结果,则正确的语法可能是(time (doall (computation))),如果不想,则返回(time (dorun (computation)))