循环下降和服用的组合说明

  • 本文关键字:组合 说明 循环 clojure
  • 更新时间 :
  • 英文 :


我正在尝试理解旋转序列的实现,我在 git hub 中找到的答案如下

(fn [n coll]
(take (count coll) (drop (mod n (count coll)) (cycle coll))))

你能解释一下这里到底发生了什么

(take 6 (drop 1 (cycle ["a" "b" "c"])))
("b" "c" "a" "b" "c" "a")

这是如何产生的

来自cycle的文档:

返回 coll 中项的延迟(无限!(重复序列。

所以在你的例子中:

(cycle ["a" "b" "c"])
;; => ["a" "b" "c" "a" "b" "c" "a" "b" "c" "a" "b" "c" ...]

(朝向无穷大和更远(

要削减无限序列,您必须使用take它采用序列的第一个n元素。所以:

(take 6 (cycle ["a" "b" "c"]))
;; => ["a" "b" "c" "a" "b" "c"]

在您的示例中,就在调用take之前,您使用了省略序列的第一个n元素的drop。所以:

(drop 1 (cycle ["a" "b" "c"]))
;; => ["b" "c" "a" "b" "c" "a" "b" "c" "a" "b" "c" ...]
(take 6 (drop 1 (cycle ["a" "b" "c"])))
;; => ["b" "c" "a" "b" "c" "a"]

你可以从"勇敢和真实的Clojure"的这一章中了解更多关于懒惰序列的信息。

最新更新