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更靈活的設計。這是我能想到的一個原因,雖然我沒有設計「時間」;)。 –