gpt4 book ai didi

clojure - `binding` 是否与 `iterate` 一起使用?

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

代码有问题吗?看起来 binding 不适用于 iterate

(def ^:dynamic *step* 1)(defn incr [n] (+ n *step*))(take 3 (binding [*step* 2] (iterate incr 1)))

给予

'(1 2 3)

不是

'(1 3 5)

最佳答案

问题是 iterate 返回一个惰性序列。因此,当您尝试打印序列时,对 incr 函数的第一次调用发生在 binding 范围之外。

从技术上讲,您的 incr 函数并非没有副作用,只是因为它使用了 ^:dynamic 变量。

如果你想对惰性序列使用binding,你应该强制在binding范围内的某个地方评估你的序列,例如:

(binding [*step* 2]
(doall (take 3 (iterate incr 1))))
; => (1 3 5)

关于clojure - `binding` 是否与 `iterate` 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29365152/

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