gpt4 book ai didi

clojure - 如何将 Reduce-Realized 序列转回 Lazy Vector 序列

转载 作者:行者123 更新时间:2023-12-02 00:22:44 26 4
gpt4 key购买 nike

当我将一个 221 行的 .csv 文件——使用 clojure-csv 解析——运行到这个函数中时

(defn test-key-inclusion
"Accepts csv-data param and an index, a second csv-data param and an index,
and searches the second csv-data instances' rows (at index) to see if
the first file's data is located in the second csv-data instance."

[csv-data1 pkey-idx1 csv-data2 pkey-idx2 lnam-idx fnam-idx]

(reduce
(fn [out-log csv-row1]
(let [cmp-val (nth csv-row1 pkey-idx1 nil)
lnam (nth csv-row1 lnam-idx nil)
fnam (nth csv-row1 fnam-idx)
temp-rc (first (key-pres? cmp-val pkey-idx2 csv-data2))]

(concat out-log (sorted-map cmp-val (vector lnam fnam)))))
{}
csv-data1))

然后打印结果,一切正常。

如果我通过上面的函数运行一个 2672 行的 .csv 文件——也用 clojure-csv 解析——然后尝试打印它,我得到一个堆栈溢出错误——线程“main”java.lang 中的异常.堆栈溢出错误

所以我的问题是:

1) 是否应该在 lazy-seq 中包装对此函数的调用来解决我的问题?

2) 我不想要一个列表,所以将把 lazy-seq 调用包装在一个 vec turn 中我的序列变回一个向量,而没有在内存中实现整个序列,这就是让惰性序列再次变得不惰性?

谢谢。

最佳答案

1) 我希望让序列变得懒惰不会有帮助,因为打印会在打印之前评估实现它。而是尝试 doseq(map print my-seq) 以较小的 block 打印它。

2) 是的,将它包装在 vec 中会给你想要的东西 :) 尽管用 into 包装你的 reduce 会一直保持它是一个向量。即:(减少为 [] [[1] [2] [3]] ) --> [1 2 3]

  (into out-log (sorted-map cmp-val (vector lnam fnam)))))

关于clojure - 如何将 Reduce-Realized 序列转回 Lazy Vector 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10132565/

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