gpt4 book ai didi

clojure - 使用 doseq 和 into 从 let 返回一个数组

转载 作者:行者123 更新时间:2023-12-05 09:20:59 26 4
gpt4 key购买 nike

我正在尝试从 let 语句返回一个列表。

(let [data []]
(doseq [x ["0" "1" "2" "3" "4"]]
(into data (do-stuff x))) data)

但是 data 列表总是空的。

我检查了this从 let 范围返回值的答案但是无法解决这个问题。

最佳答案

如果您试图了解 Clojure 中的循环机制,您可能正在寻找这个(假设您正在做的只是集合如何工作的练习):

(对于 [x ["1""2""3"]] x)

结果是:

("1""2""3")

当然,如果这就是您要执行的全部操作,那么您已经拥有该集合并且不需要构建它。

根据您的编辑,执行此操作:

(for [x ["1""2""3"]] (do-stuff x))

还有很多其他方法可以做这种事情,比如使用 mapreduce 和其他工具,这取决于 do-stuff 的复杂性 以及它需要访问的内容。

请记住,Clojure 中的默认值是不可变的。您根本无法改变您的 data,它的值固定为 []。除非你把它变成一个 atom,这对你需要的东西来说是不必要的。函数式编程是关于构建值,而不是改变变量。

有很多方法可以表达你想做什么,但是 fordo-seq 的列表构建(“列表理解”)版本,因为它们共享相同的通用结构。由于您的问题是关于 do-seq 的,因此我讨论 for 是为了更好地衡量。但是 map 在这里是更好的选择。如果您真的需要它是一个向量而不是惰性序列,那么使用 mapv

如果您需要保存这些结果的名为data 的东西,那么只需这样做:

(let [data (for [x ["1" "2" "3"]] x)] ;;or map, etc
;;do something with data
)

关于clojure - 使用 doseq 和 into 从 let 返回一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35538134/

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