私のように文書化されているclojure.core /時間を呼んでいるclojure.core/timeを使用するために特別な処理を行う必要がありますか? 「式exprを評価し、それが要した時間を表示しますexprの値を返します」
例:
(time (expensive))
それはそれがないことを示してMacroexpandingそれをlet式の値で直ちに返すべき時間を出力した後に、letとして値を格納します。
私は高価な計算をしても電話をすると、遅れて時間が戻ってきますが、結果が表示されるまでかなりの時間(時には10秒以上)を待たなければなりません。
誰でもここで何が起こっているのか説明できますか?
PS:これは、違いがあれば、clojure 1.3.0を使用しています。
これは、ほとんど間違いなく怠惰の問題です。私は操作をプロファイリングしていた以前の質問をしましたが、最初は操作が驚くほど短時間でした。その後、実際に計算されていないことがわかった。正しい構文はおそらく結果を返す場合は(time(doall(計算))、そうでない場合は(time(dorun(計算)))です。 –
そのような場合にdoallを含む時間がないのはなぜですか?あなたが何かをタイミングしているなら、実際にどれくらいの時間がかかるかを知りたいと思うでしょうか? – toofarsideways
あなたはあなたが内部で何をしているかを正確に測定しています:怠惰なseqを構築し、怠惰なseqのすべての要素を消費しないでください(もしあなたがしているなら、あなたの詳細はありません)。 「あなたが望むものを明示する」とは、暗黙のdoallよりも柔軟な設計です。私は「時間」をデザインしていませんでしたが、それが私が思いつく一つの理由です)。 –