gpt4 book ai didi

clojure - 惰性序列最小-最大查找器 stackoverflow 问题

转载 作者:行者123 更新时间:2023-12-02 14:12:05 24 4
gpt4 key购买 nike

 (defn min-max-by-columns [s]
(reduce (fn [[smallest largest] y]
[(map min smallest y) (map max largest y)])
[(first s) (first s)]
s))

我试图找出一个大表(固定长度序列的序列)每列的最大值和最小值

上面的代码对于小表工作正常,但对于大表我会得到一个 stackoverflow 错误

clojure.core/map/fn--3594 (core.clj:2370)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:60)
clojure.lang.RT.seq (RT.java:447)
clojure.core/seq (core.clj:133)
clojure.core/map/fn--3594 (core.clj:2371)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:60)
clojure.lang.RT.seq (RT.java:447)
clojure.core/seq (core.clj:133)
clojure.core/map/fn--3594 (core.clj:2371)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:60)
clojure.lang.RT.seq (RT.java:447)
clojure.core/seq (core.clj:133)
clojure.core/map/fn--3594 (core.clj:2371)

...

我是否因为[(first s) (first s)]这行而捕获了头部?我需要这些值才能使算法正常工作。

我该如何解决这个问题?

最佳答案

我似乎找到了解决方案。正如 amalloy 所解释的那样,(映射最小 x)和(映射最大最大 x)同时实现。然而,我正在尝试解决与他正在解决的问题不同的问题。幸运的是,他的洞察力帮助我找到了解决方案。诀窍是在每个 map 周围包裹一个 doall,以便它们在中间步骤中实现,而不是在最后一次性实现。

 (defn min-max-by-columns [s]
(reduce (fn [[smallest largest] y]
[(doall (map min smallest y)) (doall (map max largest y))])
[(first s) (first s)]
s))

关于clojure - 惰性序列最小-最大查找器 stackoverflow 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5794831/

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