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で解析されます)を上記の関数で実行してから印刷しようとすると、スタックオーバーフローエラーが発生します-スレッド「メイン」の例外java.lang.StackOverflowError
だから私の質問は:
1)lazy-seq内でこの関数の呼び出しをラップすると、問題が解決するはずですか?
2)リストが必要ないので、lavy-seq呼び出しをvec内でラップすると、メモリ内のシーケンス全体を認識せずにシーケンスがベクトルに戻ります。つまり、lazy-seqが再びレイジーではなくなりますか?
ありがとうございました。