gpt4 book ai didi

clojure - Clojure 中最简单的惰性函数

转载 作者:行者123 更新时间:2023-12-04 22:23:49 29 4
gpt4 key购买 nike

我很难理解懒惰。

有人能帮我理解为什么我下面的函数不是懒惰的吗

(defn my-red
([f coll] (my-red f (first coll) (rest coll) ))
([f init coll]
(let [mr (fn [g i c d]
(if (empty? c) d
(recur g (g i (first c)) (rest c) (conj d (g i (first c)) ))))]
(lazy-seq (mr f init coll [])))))

而 clojure.org/lazy 上给出的这个例子是
(defn filter
"Returns a lazy sequence of the items in coll for which
(pred item) returns true. pred must be free of side-effects."
[pred coll]
(let [step (fn [p c]
(when-let [s (seq c)]
(if (p (first s))
(cons (first s) (filter p (rest s)))
(recur p (rest s)))))]
(lazy-seq (step pred coll))))

最佳答案

filter 中的懒惰来自递归循环的 filter 分支中对 if 的调用。这就是代码命中另一个 lazy-seq 并停止评估 seq 的地方,直到请求另一个元素。

您的 my-red 实现一次且仅一次调用 lazy-seq,这意味着您的 seq 要么根本没有评估,要么完全没有评估。

关于clojure - Clojure 中最简单的惰性函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362134/

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