Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 反恐执行局。为了答案的完整性,也许您可以添加一些代码来实际重建完整的树。我通过(defn运行[size](让[root builder(root'(level-1'(level-2'size)))更新内容(fn[f节点)(在节点[:content]f]中更_Xml_Clojure_Tree_Lazy Evaluation - Fatal编程技术网

Xml 反恐执行局。为了答案的完整性,也许您可以添加一些代码来实际重建完整的树。我通过(defn运行[size](让[root builder(root'(level-1'(level-2'size)))更新内容(fn[f节点)(在节点[:content]f]中更

Xml 反恐执行局。为了答案的完整性,也许您可以添加一些代码来实际重建完整的树。我通过(defn运行[size](让[root builder(root'(level-1'(level-2'size)))更新内容(fn[f节点)(在节点[:content]f]中更,xml,clojure,tree,lazy-evaluation,Xml,Clojure,Tree,Lazy Evaluation,反恐执行局。为了答案的完整性,也许您可以添加一些代码来实际重建完整的树。我通过(defn运行[size](让[root builder(root'(level-1'(level-2'size)))更新内容(fn[f节点)(在节点[:content]f]中更新))(>(root builder)(在[:content]中更新)(映射(部分更新内容删除节点)%))))我将调查为什么我得到的XML数据不能使用此方法。可能是data.xml添加到数据结构中的内容。因此,您可能遇到的新问题是,对于我所知道


反恐执行局。为了答案的完整性,也许您可以添加一些代码来实际重建完整的树。我通过
(defn运行[size](让[root builder(root'(level-1'(level-2'size)))更新内容(fn[f节点)(在节点[:content]f]中更新))(>(root builder)(在[:content]中更新)(映射(部分更新内容删除节点)%))))
我将调查为什么我得到的XML数据不能使用此方法。可能是
data.xml
添加到数据结构中的内容。因此,您可能遇到的新问题是,对于我所知道的任何懒惰模型,读取xml流并生成“懒惰树”都是非常困难的。很难真正了解c.d.xml内部的情况:它声称是懒惰的,也许这取决于“懒惰”的含义,但我建议仔细检查一下。由于您有一个很大的XML文件,请尝试使用
(defn walk[tree](when(coll?tree)(doseq[x tree](walk x)))
遍历整个文件,看看这是否会耗尽您的内存。@nblumoe我刚刚下载了一个700MB的XML文件,并尝试了(walk(XML/parse(reader the file)))。如果这实际上是一个懒惰的树,它将在恒定的空间中运行,并最终输出nil。取而代之的是,它消耗了我的系统中的所有内存,将整棵树固定在适当的位置。如果您想懒洋洋地处理XML,您可能必须自己处理SAX事件流,而不是让其他人为您将其整理成一棵树。
                 R                                         Root
       __________|____________________
       A                   B         C, D, E, ...          1st Level Children
_______|_______     _______|_______
X Y Y ... Y X Y     X Y Y ... Y X Y                        2nd Level Children
           R
     ______|__________________
     A             B         C, D, E, ...
_____|___     _____|___
X X ... X     X X ... X
;; Generating example data
;;;;;;;;;;;;;;;;;;;;;;;;;;

(defn root [content]
  {:tag :root :content content})

(defn lazy-elements [n tag content]
  (lazy-seq (repeat n {:tag tag :content content})))

(defn level-1 [content]
  (lazy-elements 3 :A content))

(defn level-2 [n]
  (concat (lazy-elements 10 :X '(:leaf))
          (lazy-elements n :Y '(:leaf))))

(defn remove-nodes [node]
  (remove #(= (:tag %) :Y) node))


;; Illustrating usage
;;;;;;;;;;;;;;;;;;;;;

;; runs and runs and runs... and eventually returns correctly
(defn valid-run []
  (->> (root (level-1 (level-2 1e8)))
       :content
       first
       :content
       remove-nodes))

;; Does not terminate properly, runs out of memory
(defn invalid-run []
  (->> (root (level-1 (level-2 1e8)))
       :content
       (map :content)       ; source of head retention
       (map remove-nodes)))
(defn root' [content]
  (fn []
    {:tag :root :content (content)}))

(defn lazy-elements' [n tag content]
  (repeatedly n (fn [] {:tag tag :content (content)})))

(defn level-1' [content]
  (fn []
    (lazy-elements' 3 :A content)))

(defn level-2' [n]
  (fn []
    (concat (lazy-elements' 10 :X (fn [] '(:leaf)))
            (lazy-elements' n :Y (fn [] '(:leaf))))))

(defn remove-nodes [node]
  (remove #(= (:tag %) :Y) node))

(defn run []
  (let [root-builder (root' (level-1' (level-2' 1e8)))]
    (->> (root-builder)
         :content
         (map :content)       
         (map remove-nodes))))

user> (pprint (run))
(({:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)})
 ({:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)})
 ({:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}
  {:tag :X, :content (:leaf)}))