2
什么是与下面的代码的问题: 的FUNC表达式获取包含术语,它包括表达表达...间接递归 - Clojure的
(defn term[]
(def mytmp (zip/xml-zip {:tag :term}))
(cond
(= (first(:content(first vecTok))) "(")
(do
(def mytmp (popVecTo mytmp))
(def mytmp (zip/append-child mytmp (expression)))
(def mytmp (popVecTo mytmp)))
:else
(def mytmp (popVecTo mytmp)))
(zip/node mytmp))
(defn expression[]
(def mytmp (zip/xml-zip {:tag :expression}))
(def mytmp (zip/append-child mytmp (term)))
(while (contains? #{"+", "-", "*","/", "&", "|", "<", ">", "="} (first(:content(first vecTok))))
(do
(def mytmp (popVecTo mytmp))
(def mytmp (zip/append-child mytmp (term)))))
(zip/node mytmp))
(def vecTok (vec (:content(first(xml-seq (parse "C:/Users/User/Desktop/forHekronot/BallT.xml"))))))
在文件:
<a><symbol>(</symbol><identifier>dy</identifier><symbol>-</symbol><identifier>dx</identifier><symbol>)</symbol></a>
使用高清是坏主意,请使用我们。 –
投票结束,因为没有解释我能看到的问题。 –
只是我看到的一些问题。 1)你试图编写可变的代码,而不是采取更多功能的方法。 2)你正在使用'(def ...)'来定义顶层var,而不是使用[let](http://clojuredocs.org/clojure_core/clojure.core/let)和[threading宏](http://clojuredocs.org/clojure_core/clojure.core/-%3E)。 3)你似乎在不断地重新定义'vecTok',这不是惯用的Clojure。我认为你需要做的是备份,并将xml流视为序列,并使用'map','filter'和其他序列抽象操作该序列。 – jszakmeister