我试图接触二十一点中所有潜在的庄家手牌,但当我不断地把筹码扔掉时,我意识到事情并没有预期的那么深。所以我在 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 输出,我将不胜感激。
谢谢,约翰