gpt4 book ai didi

file-io - 修改clojure中的Clojure源代码文件

转载 作者:行者123 更新时间:2023-12-02 14:46:39 25 4
gpt4 key购买 nike

我想知道是否可以将 Clojure .clj 源文件中包含的代码作为列表加载,而不进行编译。

如果我可以将 .clj 文件作为列表加载,我可以修改该列表并将其漂亮地打印回同一个文件中,然后可以再次加载。

(也许这是一个坏主意。)有谁知道这是否可能?

最佳答案

这不是一个坏主意,它是 lisp 的主要属性之一,代码就是数据。您可以使用 read-string 将 clj 文件作为列表读取,修改它并将其写回。


(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)))))

这会读取自身并切换 bool 值并将其写回。

关于file-io - 修改clojure中的Clojure源代码文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com