Tengo una cadena que contiene un formulario Clojure válido. Quiero reemplazar una parte, al igual que con assoc-in
, pero procesar toda la cadena como tokens.Reemplazo de subcadena sensible a la sintaxis
=> (assoc-in [:a [:b :c]] [1 0] :new)
[:a [:new :c]]
=> (assoc-in [:a
[:b,, :c]] [1 0] :new)
[:a [:new :c]]
=> (string-assoc-in "[:a
[:b,, :c]]" [1 0] ":new")
"[:a
[:new,, :c]]"
Quiero escribir string-assoc-in
. Tenga en cuenta que su primer y último argumento son cadenas, y mantiene el salto de línea y las comas. ¿Es factible en Clojure? Lo más parecido que encontré es read
que llama a clojure.lang.LispReader
, pero no sé cómo funciona.
Quiero usarlo para leer un archivo fuente Clojure y mostrarlo con algunas modificaciones, manteniendo la estructura del archivo.
No se me ocurre ninguna manera de hacer esto de manera confiable sin escribir tu propio lector. –
Suena como un defmacro para * me * –
@Paul Nathan: En realidad, una macro Lisp tiene las mismas operaciones de manipulación de cadenas a su disposición que una función normal. "Todo el lenguaje siempre está allí", como lo expresó Paul Graham. :-) –