gpt4 book ai didi

clojure - 从文件中收集行

转载 作者:行者123 更新时间:2023-12-01 09:56:45 25 4
gpt4 key购买 nike

这应该是一个简单的问题,但我花了好几个小时还是不明白如何在 Clojure 中正确使用集合。我正在尝试读取一个文件并将每一行存储在一个集合中。到目前为止,这是我的代码。

(def dictionary #{})
;(conj dictionary "hi")
(defn readDictionary []
(doseq [line (clojure.string/split-lines
(slurp "C:\\Working\\Other\\dictionary.txt"))]
(println line)
(conj dictionary line)))
(readDictionary)

(println dictionary)

我可以将“hi”字符串附加到集合中,并且每一行都在 doseq 中打印出来,但是当我打印出来时集合最终变成空白。

我非常熟悉 OO 编程,但函数式编程对我来说是新事物。

最佳答案

问题不在于集合本身。问题是 conj 和大多数核心库一样,没有有副作用。所以表达式:

(conj dictionary line)

... 计算dictionary 添加了 line ,留下 dictionary (和 )完全没有变化。因此 doseq 生成一系列集合,每个集合包含一行。

电话

(readDictionary)

... 评估这个单成员集序列,然后丢弃它,因为它没有绑定(bind)到任何东西。因此,调用没有任何净效果

我想你想要这样的东西(未经测试):

(defn readDictionary [file-name]
(into #{} (clojure.string/split-lines (slurp file-name))))

(def dictionary (readDictionary "C:\\Working\\Other\\dictionary.txt"))

(doseq [line dictionary] (println line))

在 Clojure 中,您必须习惯使用对不可变/持久数据结构进行操作的纯(无副作用)函数。

关于clojure - 从文件中收集行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25084810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com