我试图在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