现在编辑我得到:无法在此上下文中解析符号: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))
但在使用它时有以下堆栈,我不知道为什么......
答案 0 :(得分:2)
在第(i++)
行,你试图调用你在
我试图先给你一个提示.. :)
你应该知道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的语言编写代码的方式