在clojure

时间:2017-11-19 16:32:58

标签: file-io clojure distinct-values

我对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)

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:3)

使用Clojure,一个好的方法是将完成任务所需的内容分解为尽可能简单的函数。一旦编写并测试了这些简单的功能,您就可以将它们组合在一起。很多时候,您需要的简单函数已经存在,就像frequencies

的情况一样
(frequencies ["foo" "bar" "foo" "quux" "foo"])
=> {"foo" 3, "bar" 1, "quux" 1}

所以听起来你需要做的就是将输入文件标记化并将frequencies应用于标记列表。