gpt4 book ai didi

clojure - clojure 中的递归树遍历结果是广度优先,而不是深度优先。

转载 作者:行者123 更新时间:2023-12-04 05:20:49 25 4
gpt4 key购买 nike

我试图在 21 点中触及所有潜在经销商的手,但是当我继续吹筹码时,我意识到事情并不像预期的那样深度优先。所以我在 ruby​​ 中尝试了类似的代码,结果却有所不同。

这段代码,

(def d [2 3 4 5 6 7 8 9 10 10 10 10 11])
(defn dig1 [lst depth tot]
(do
(print depth)
(if (< tot 17) (map #(dig1 (conj lst %) (+ depth 1) (+ tot %)) d)) ))

(dig1 [0] 0 0)

产生:011111111111112222222222222...

我希望 map 在 d[0] 上执行函数并深入挖掘,而不是查看在给定级别执行的所有内容。我显然不明白发生了什么。我需要做一些懒惰的事情吗(呃)? map 产生惰性序列,但显然将它们分成 32 组。

相比之下,
@d = [2,3,4,5,6,7,8,9,10,10,10,10,11]
def dig(lst, depth, tot)
p depth
@d.map{|e| dig(lst.dup.push(e),depth+1,tot+e)} if tot < 17
end

产生我所期望的:0123456789999999999999888888888888

如果有人能告诉我如何使 clojure 输出看起来像 ruby​​ 输出,我将不胜感激。

谢谢,约翰

最佳答案

通常 map 当您不想返回返回值并且仅评估序列的副作用时不使用。像 doseq 这样的东西更可取。

(def d [2 3 4 5 6 7 8 9 10 10 10 10 11])
(defn dig1 [lst depth tot]
(print depth)
(when (< tot 17)
(doseq [i d]
(dig1 (conj lst i)
(inc depth)
(+ tot i)))))
(dig1 [0] 0 0)

产生: 012345678999....

关于clojure - clojure 中的递归树遍历结果是广度优先,而不是深度优先。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717053/

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