Cuando quiero leer en un S-expresión almacenada en un archivo en un programa de Common Lisp correr, hago lo siguiente:Clojure: ¿Equivalente a la función de lectura de Common Lisp?
(defun load-file (filename)
"Loads data corresponding to a s-expression in file with name FILENAME."
(with-open-file (stream filename)
(read stream)))
Si, por ejemplo, tengo un archivo llamado foo.txt
que contiene el S -expresión (1 2 3)
, la función anterior devolverá esa expresión S si se llama de la siguiente manera: (load-file "foo.txt")
.
He estado buscando y buscando y no he encontrado una solución igualmente elegante en Clojure. ¿Algunas ideas?
Gracias!
Hola, ¿cuál es la ventaja, en su caso, de este enfoque sobre (read-string (slurp "foo.txt")) – jkndrkn
'slurp' /' io/slurp * 'arrastra todo el contenido del archivo, aunque' read-string' solo leerá un formulario completo y descartará el resto. El enfoque 'con-en-lector 'leerá solo un poco más allá de la primera forma (debido al almacenamiento en búfer). Además, puede tener más formularios en el cuerpo de 'con-en-lector'; en particular, las invocaciones subsecuentes de 'read' dentro del mismo formulario' with-in-reader' devolverían formularios adicionales del archivo. (Intenta usar '[(leer) (leer)]' como el cuerpo para obtener las dos formas iniciales.) Sin embargo, habría publicado tu respuesta junto a esta si hubiera pensado en ello. :-) –