gpt4 book ai didi

clojure - Clojure 有 "unfold"吗?

转载 作者:行者123 更新时间:2023-12-04 19:02:29 25 4
gpt4 key购买 nike

(defn unfold [step seed]
(if-let [[val new-seed] (step seed)]
(cons val (lazy-seq (unfold step new-seed)))
nil))

用法示例:
(defn fib-step [[x y]] [x [y (+ x y)]])
(take 10 (unfold fib-step [0 1])) ;=> (0 1 1 2 3 5 8 13 21 34)

(defn decreasing [x] (if (neg? x) nil [x (dec x)]))
(unfold decreasing 5) ;=> (5 4 3 2 1 0)

clojure 标准(或常用)库中是否存在这种或类似的东西?如果没有,有什么原因吗?我找到的最接近的是这篇博文:

http://www.matlux.net/blog/2014/05/04/anamorphic-adventure-in-clojure

最佳答案

不,unfold未在 Clojure 中实现。它由 amalloys flatland.useful 库提供,根据 CrossClj 具有广泛的用途。看到您链接的博客文章对该主题进行了相当深入的探索,我怀疑您的问题不仅仅是直接回答可以满足的...是不够的?还是失望iterate不完全iterate在名称或行为上?

(defn fib-step [[a b]] [b (+ a b)])
(take 10 (map first (iterate fib-step [0 1])))

(take-while (complement neg?) (iterate dec 5))

我更喜欢使用 unfold对于这些示例,因为 iterate已经是核心的一部分。我可以看到人们更喜欢 iterate如果他们更熟悉的话。

有许多库提供“应该在核心中的东西”,例如 https://weavejester.github.io/medley/medley.core.html .快速搜索 https://crossclj.info/揭示 https://github.com/amalloy/useful包含 flatland.useful.seq/unfold,虽然我没有使用过,但它看起来是 Clojure 核心贡献者的一个很好的实现,并且附带了一些其他很酷的东西。

关于clojure - Clojure 有 "unfold"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34320738/

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