Tengo algunos problemas para entender cómo funciona la macro delay
en Clojure. No parece hacer lo que se espera que haga (es decir, retrasar la evaluación). Como se puede ver en este ejemplo de código:Evaluación diferida en Clojure
; returns the current time
(defn get-timestamp [] (System/currentTimeMillis))
; var should contain the current timestamp after calling "force"
(def current-time (delay (get-timestamp)))
Sin embargo, llamando current-time
en el REPL aparece para evaluar de inmediato la expresión, incluso sin haber utilizado el force
macro:
user=> current-time
#<[email protected]: 1276376485859>
user=> (force current-time)
1276376485859
¿Por qué la evaluación de get-timestamp
no se retrasó hasta la primera llamada force
?
comentario menor: es mejor usar (System/currentTimeMillis) directamente en lugar de construir una Fecha: usan la misma fuente subyacente de milisegundos, pero la primera evita una asignación innecesaria de objetos. – mikera