J'ai une chaîne contenant un formulaire Clojure valide. Je veux en remplacer une partie, comme avec assoc-in
, mais en traitant toute la chaîne comme des jetons.Remplacement de sous-chaîne compatible avec la syntaxe
=> (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]]"
Je souhaite écrire . Notez que ses premier et dernier arguments sont des chaînes, et qu'il garde le saut de ligne et les virgules. Est-ce faisable à Clojure? La chose la plus proche que j'ai trouvé est read
qui appelle clojure.lang.LispReader
, mais je ne sais pas comment ça marche.
Je souhaite l'utiliser pour lire un fichier source Clojure et l'afficher avec quelques modifications, en conservant la structure du fichier.
Je ne peux pas penser à un moyen de le faire de manière fiable sans écrire votre propre lecteur. –
Semble comme un defmacro à * moi * –
@ Paul Nathan: En fait, une macro Lisp a les mêmes opérations de manipulation de chaînes à sa disposition comme le fait une fonction régulière. "La langue entière toujours là", comme Paul Graham l'a dit. :-) –