我試圖在Clojure中找到滿足給定謂詞的序列的最後一個元素。如何找到在Clojure中滿足給定謂詞的序列的最後一個元素?
我使用下面的代碼的那一刻:
(last (take-while pred (gimme-potentially-infinite-seq ...)))
不幸的是,(take-while ...)
持有到頭部,導致我出的內存在某些情況下。
我可以使用loop/if/recur
組合來解決這個問題,但也許在clojure.core中有一些函數(或函數的組合)可以做到這一點嗎?
更新:這不是take-while
這是持有的頭,但last
。
更新2:我在Clojure REPL和ClojureScript REPLs(Planck 2.0.0和Lumo 1.1.0)中測試了(->> (range) (take 10000000) last)
。普朗克(2GB內存)和Lumo(1.5GB)的堆增長很大,而JVM(200-300MB)的堆增長較小。
我可能會錯過一些東西......但是你怎麼能期望在*無限*序列中找到滿足謂詞的最後一個元素?您必須掃描整個序列才能得到結果。 –
你能解釋爲什麼你認爲'last'持有頭部?您的調用適用於持續堆使用(無限制增長)。 – glts
@glts它似乎是ClojureScript的東西(見我上面的更新)。 – sickill