Clojure的.落每?

int*_*tar 1 functional-programming clojure lazy-evaluation

Clojure库是否具有"drop-every"类型的功能?什么需要一个懒惰的列表并返回一个列表与每第n项删除?

不能弄清楚如何做到这一点.

干杯

菲尔

Mic*_*zyk 5

(defn drop-every [n xs]
  (lazy-seq
   (if (seq xs)
     (concat (take (dec n) xs)
             (drop-every n (drop n xs))))))
Run Code Online (Sandbox Code Playgroud)

例:

(drop-every 2 [0 1 2 3 4 5])
;= (0 2 4)

(drop-every 3 [0 1 2 3 4 5 6 7 8])
;= (0 1 3 4 6 7)
Run Code Online (Sandbox Code Playgroud)

作为一个侧面说明,drop-nth将是一个诱人的名字,因为已经有一个take-nthclojure.core.但是,take-nth总是返回第一个项目,然后返回每个第n个项目,而上述版本的drop-every每个第n个项目都以原始序列的第n个项目开始.(删除第一个项目的函数和第一个项目之后的每个第n个项目将根据上述内容直接写入.)