gpt4 book ai didi

clojure - 来自长时间运行的递归 Clojure 函数的进度更新

转载 作者:行者123 更新时间:2023-12-02 04:38:57 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