如何迭代集合并在每次迭代时访问上一个,当前值和下一个值?

eli*_*ocs 2 clojure

如何在Clojure中迭代集合的元素,以便在每次迭代中访问前一个,当前值和下一个值.

使用以下向量:

[1 2 3 4]
Run Code Online (Sandbox Code Playgroud)

我想在每次迭代中访问以下值:

[nil 1 2]
[1 2 3]
[2 3 4]
[3 4 nil]
Run Code Online (Sandbox Code Playgroud)

Erw*_*ers 5

做到这一点的一种方式是通过concatnil之前和采集后和partition通过以1的步长的3个元素荷兰国际集团它.

(def c [1 2 3 4])
(def your-fn println) ;; to print some output later
(map your-fn
     (map vec (partition 3 1 (concat [nil] c [nil]))))
Run Code Online (Sandbox Code Playgroud)

(map vec如果元素是LazySeq而不是向量,则可以删除该部分.)

哪个印刷品:

[nil 1 2]
[1 2 3]
[2 3 4]
[3 4 nil]