我正在努力通過Stuart Halloway的書Programming Clojure。這整個功能的東西對我來說是非常新的。Clojure函數(nth [coll索引])和作文(last(take index coll))有什麼區別
我明白
(defn fibo[]
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))
如何懶洋洋地產生斐波那契序列。我不明白爲什麼
(last (take 1000000 (fibo)))
作品,而
(nth (fibo) 1000000)
拋出一個OutOfMemoryError。有人可以解釋這兩個表達式有何不同? (第nth)以某種方式保持序列的頭部?
謝謝!
這兩種方法都不適用於tryclj。因爲數字太大會導致溢出。 AFAICT你沒有提及任何事情,所以我不相信任何事情都是「持有頭腦」。你確定這不僅僅是因爲這個數字如此之大 - – 2011-12-15 15:57:14
last的實現是一個簡單的O(n)尾遞歸實現,它不支持任何東西。 nth是用Java實現的,我很確定它不能保持任何東西。因此,你的兩個序列應該工作得很好(理論上)。 我能想到的唯一的東西,雖然我不清楚這會影響結果,但是你的第n個電話實際上計算的是比上次電話多1個電話。第1000000 = 1000001項(0索引) – vedang 2011-12-15 16:42:05