int*_*tar 1 functional-programming clojure lazy-evaluation
Clojure库是否具有"drop-every"类型的功能?什么需要一个懒惰的列表并返回一个列表与每第n项删除?
不能弄清楚如何做到这一点.
干杯
菲尔
(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-nth在clojure.core.但是,take-nth总是返回第一个项目,然后返回每个第n个项目,而上述版本的drop-every每个第n个项目都以原始序列的第n个项目开始.(删除第一个项目的函数和第一个项目之后的每个第n个项目将根据上述内容直接写入.)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |