我正在调用clojure.core / time,记录为"评估expr并打印所花费的时间。返回expr"
的值例如:
(time (expensive))
宏扩展它表明它确实将值存储为let,因此在输出时应该立即返回let表达式中的值。
当我通过昂贵的计算进行呼叫时,我看到延迟然后得到时间,但是必须等待很长时间(有时+10秒或更长时间)才能显示结果。
有人能解释一下这里发生了什么吗?
PS:这是使用clojure 1.3.0,如果这有任何区别。
答案 0 :(得分:6)
也许你正在返回一些懒惰的东西,其中的元素只有在输入到REPL时才会产生?在这种情况下,您可能希望将其包装在dorun
中,这会强制生成所有元素。
如果您可以提供昂贵计算的详细信息,我们可以看看是否属实。
来自Savanni D'Gerinel评论的有用补充:
如果要返回结果,则正确的语法可能是(time (doall (computation)))
,如果不想,则返回(time (dorun (computation)))
。