gpt4 book ai didi

clojure - Clojure函数(第n个[coll索引])和组合(last(取索引coll))有什么区别

转载 作者:行者123 更新时间:2023-12-04 01:10:51 24 4
gpt4 key购买 nike

我正在尝试阅读 Stuart Halloway 的《Programming Clojure》一书。这整个功能性的东西对我来说很新。

我明白如何

(defn fibo[]
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))

懒惰地生成斐波那契数列。我不理解为什么
(last (take 1000000 (fibo)))

工作,而
(nth (fibo) 1000000)

抛出 OutOfMemoryError。有人可以解释一下这两种表达方式有何不同吗? (nth) 是否以某种方式保持序列的头部?

谢谢!

最佳答案

我认为您正在谈论在 google group 中讨论的问题和 Rich Hickey 提供 patch解决了这个问题。后来出版的这本书没有涵盖这个主题。

clojure 1.3 您的 nth示例在 fibo 中略有改进功能。现在,由于 1.3 的变化,我们应该明确标记 M使用任意精度,否则会落在 throwIntOverflow .

(defn fibo[]
(map first (iterate (fn [[a b]] [b (+ a b)]) [0M 1M])))

随着这些变化
(nth (fibo) 1000000)

成功(如果你有足够的内存)

关于clojure - Clojure函数(第n个[coll索引])和组合(last(取索引coll))有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522531/

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