gpt4 book ai didi

"partition"函数实现中的递归

转载 作者:行者123 更新时间:2023-12-01 07:26:28 29 4
gpt4 key购买 nike

我在随机阅读 Clojure 源代码时看到了 partition function was defined in terms of recursion without using "recur" :

(defn partition
... ...
([n step coll]
(lazy-seq
(when-let [s (seq coll)]
(let [p (doall (take n s))]
(when (= n (count p))
(cons p (partition n step (nthrest s step))))))))
... ...)

这样做有什么理由吗?

最佳答案

分区很懒。对 partition 的递归调用发生在 lazy-seq 的主体内.因此,它不会立即被调用,而是在一个特殊的 seq-able 对象中返回,以便在需要时进行评估并缓存迄今为止实现的结果。堆栈深度仅限于一次调用。

没有延迟序列的 recur 可用于创建一个急切的版本,但您不希望在不确定长度的序列上使用它,因为您可以在核心版本中使用它。

关于 "partition"函数实现中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21068555/

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