Non è una cattiva idea, è una delle principali proprietà di lisp, il codice è dati. puoi leggere il file clj come una lista usando read-string modificarlo e riscriverlo.
(ns tmp
(:require [clojure.zip :as zip])
(:use clojure.contrib.pprint))
(def some-var true)
;;stolen from http://nakkaya.com/2011/06/29/ferret-an-experimental-clojure-compiler/
(defn morph-form [tree pred f]
(loop [loc (zip/seq-zip tree)]
(if (zip/end? loc)
(zip/root loc)
(recur
(zip/next
(if (pred (zip/node loc))
(zip/replace loc (f (zip/node loc)))
loc))))))
(let [morphed (morph-form (read-string (str \((slurp "test.clj")\)))
#(or (= 'true %)
(= 'false %))
(fn [v] (if (= 'true v)
'false
'true)))]
(spit "test.clj"
(with-out-str
(doseq [f morphed]
(pprint f)))))
Questo si legge e commuta valori booleani e lo scrive di nuovo.
fonte
2011-08-17 18:45:22
Non è affatto una cattiva idea. Può essere usato per cose come l'analisi del codice e il rfactoring. – ivant