Clojure不会吐到results.txt

时间:2015-12-14 06:18:32

标签: clojure io

现在编辑我得到:无法在此上下文中解析符号:thecount,编译:(C:\ Users \ Matthew.lein \ bin \ testingproj \ src \ testingproj \ core.clj:14:1)

使用以下代码

(defn countstarter [] (let [thecount 0] thecount))
(defn i++ [] (inc thecount))
(defn linetravel [aline thecount]
(nth (split aline #"\s+") (thecount) "nothing found")
)

(defn grammarCHECK [aline  thecount]
(countstarter)
(while (not= linetravel "nothing found")
(do
     (print thecount) (print "debugging function")
  (if (isAFactor linetravel)
         (if (isOpenParen linetravel)
           (isAExpression  linetravel) true)
  false);;know it is not a factor if here




(i++)

)
))

我正在运行

(with-open [r (io/reader "input.txt")]
 (doseq [line (line-seq r)]
  (spit "results.txt"  (grammarCHECK line thecount))
  (spit "output.txt" (str (join "\n" (split line #"\s+")) "\n") :append true)

))

如果我发表评论(spit "results.txt" (grammarCHECK line))

,它可以正常工作

但在使用它时有以下堆栈,我不知道为什么......

enter image description here

1 个答案:

答案 0 :(得分:2)

在第(i++)行,你试图调用你在

之前定义行的Long

修改

我试图先给你一个提示.. :)

你应该知道clojure不会像java类似的语言一样使用状态..当你运行(i++)时,它会被评估为(inc thecount),它会在某处找到long(希望如此) 。虽然这可能会返回所需的新Long值,但它不会更新变量的原始副本thecount。这个变量确实不存在,因为行(countstarter)因同样的原因没有效果。

你到底想要达到什么目的?

如果你想要一个具有某种状态的循环,你可以使用类似下面的东西,它不像clojure那样,而是类似于类似java的编码风格:

(loop [state1 0 state2 1]
  (when (< state1 10)
    (println state1 state2)
    (recur (inc state1) (* 2 state2)))

你应该尝试像4clojure这样的东西,它会帮助你习惯用类似lisp的语言编写代码的方式