gpt4 book ai didi

clojure - 长期运行的递归 Clojure 函数的进度更新

转载 作者:行者123 更新时间:2023-12-02 21:36:17 25 4
gpt4 key购买 nike

我写了这个辅助函数:

(defn iterate-converge
"Returns the value from calling (f x) some number of times, until
`x` changes by less than a tolerance, `tol`. Will not execute more
than `b` (e.g. bailout) times."
[f x0 tol b]
(loop [f f x x0 tol tol b b i 0]
(if (>= i b)
(throw (ex-info "Failed to converge"
{:type ::failed-to-converge :tol tol :b b}))
(let [x' (f x)]
(if (< (abs (- x x')) tol)
x'
(recur f x' tol b (inc i)))))))

根据参数的不同,这可能需要相当长的时间。我想要功能报告其进展情况。我不希望它与控制台输出绑定(bind)(例如 println)。

我目前的想法:

  1. 添加回调函数作为参数。每次通过时调用它。这允许推送通知。
  2. 添加一个原子作为参数。每次通过时更新它。这将允许使用 add-watch 进行轮询或推送通知。 .
  3. 添加 core.async channel 作为参数。与上面的 (1) 类似,但可能会提供更好的多核性能。

你会做什么以及为什么?

最佳答案

只需让它返回候选答案的惰性序列即可。然后,您可以在闲暇时迭代它们,只要答案可以接受,或者当您认为花费的时间太长并且想要放弃时,就停止。

关于clojure - 长期运行的递归 Clojure 函数的进度更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317360/

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