我对clojure很新,只是练习一些考试题目,为期末考试做准备。
我试图找到所有名称的频率在文件中。我逐行读取文件,如果它在地图中包含特定的关键字,我会保存每个字符串。因为我不想重复,所以我试图在它面前加以区分,但我仍然不断重复。
(defn readFile []
(map (fn [line] (clojure.string/split line #";"))
(with-open [rdr (reader "C:/Users/Rohil's Computer/Desktop/textfile.txt")]
(doseq [[idx line] (map-indexed vector(line-seq rdr))]
(if(.contains line "2007")
(if(.contains line "May")
(if(not(.contains line "Batman"))
(map save [(nth(clojure.string/split line #";")3 (nth(clojure.string/split line #";")19)])
(distinct(map))
)
)
)
)
)
)
)
这是我的示例输出: 我想摆脱2个铁人元素。
(May 2007 Spiderman)
Clojure2.clj:
(March 2007 Iron man)
Clojure2.clj:
(March 2007 Iron man)
Clojure2.clj:
(April 2007 Captain America)
我有什么遗失的吗?
答案 0 :(得分:3)
使用Clojure,一个好的方法是将完成任务所需的内容分解为尽可能简单的函数。一旦编写并测试了这些简单的功能,您就可以将它们组合在一起。很多时候,您需要的简单函数已经存在,就像frequencies
:
(frequencies ["foo" "bar" "foo" "quux" "foo"])
=> {"foo" 3, "bar" 1, "quux" 1}
所以听起来你需要做的就是将输入文件标记化并将frequencies
应用于标记列表。