使用clojure中的给定步骤迭代列表

Oos*_*Oos 2 clojure

我正在尝试使用 clojure 中的给定步骤迭代列表。

在 python 中,我会执行以下操作:

xs = list(range(10))

xs[::2]
# out: [0, 2, 4, 6, 8]

xs[1::2]
# out: [1, 3, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)

我想不出一个感觉惯用的 clojure 解决方案。

这是我能想到的最好的:

(defn iterate-step-2 [xs]
  (map first (take-while some? (iterate nnext xs))))

(iterate-step-2 (range 10))
; out: (0 2 4 6 8)

(iterate-step-2 (rest (range 10)))
; out: (1 3 5 7 9)
Run Code Online (Sandbox Code Playgroud)

但它不像 python 解决方案那样通用(步骤不可配置)和灵活。此外,它似乎过于复杂。

有一个更好的方法吗 ?

Tay*_*ood 5

您可以take-nth为此使用:

user=> (take-nth 2 (range 10))
(0 2 4 6 8)
user=> (take-nth 2 (rest (range 10)))
(1 3 5 7 9)
Run Code Online (Sandbox Code Playgroud)

  • 请务必研究 Clojure CheatSheet!http://jafingerhut.github.io/cheatsheet/clojuredocs/cheatsheet-tiptip-cdocs-summary.html (2认同)