如何在Clojure中迭代集合中的元素,以便可以訪問每次迭代中的前一個,當前值和下一個值。如何迭代集合並訪問每次迭代中的前一個,當前和下一個值?
用下面的載體:
[1 2 3 4]
我想有機會獲得以下值在每個迭代:
[nil 1 2]
[1 2 3]
[2 3 4]
[3 4 nil]
如何在Clojure中迭代集合中的元素,以便可以訪問每次迭代中的前一個,當前值和下一個值。如何迭代集合並訪問每次迭代中的前一個,當前和下一個值?
用下面的載體:
[1 2 3 4]
我想有機會獲得以下值在每個迭代:
[nil 1 2]
[1 2 3]
[2 3 4]
[3 4 nil]
這裏是一個loop/recur
實現利用destructoring。
(let [s [1 2 3 4]]
(loop [[prev & [cur nxt :as more]] (cons nil s)
result []]
(if (seq more)
(recur more (conj result [prev cur nxt]))
result)))
我推薦的分區技術,但另一個竅門是map
在同一序列的交錯實例:
(let [s [1 2 3 4]]
(map vector (cons nil s)
s
(concat (drop 1 s) [nil])))
-> ([nil 1 2] [1 2 3] [2 3 4] [3 4 nil])
遞歸函數,有多個參數和它們作爲參數傳遞給復發嗎?感覺就像我誤解了你的問題。 –
@DavidBern你可以把代碼樣本? – eliocs
它的教育閱讀clojure社區的問題和答案。我覺得比較愚蠢。我想到的解決方案是: (循環[prev nil,[current&next] [0,1,2,3,4,5,6,7]](if(nil?next)current(do (println next)(當前發生的下一個)))) 當看着Erwin給出的答案時,我驚訝於剩下多少東西來學習:) –