我经常遇到这样的情况:我的代码看起来像这样:
(iterate improve x)
我正在寻找第一个不再比上一个改进的值。无论是 filter
还是 take-while
都没有明显的解决方案。然而,我不愿意写出以下内容:
(loop [current x
next (improve x)]
(if (= current next)
current
(recur next (improve next))))
或者:
(let [improvements (iterate improve x)]
(->> (map vector improvements (rest improvements))
(filter (partial apply =))
(ffirst)))
因为在某个阶段,这变得重复了,而且固定点迭代是如此基础的任务,肯定有某种库支持存在,对吧?