Clojure 获取惰性列表前n项的惰性列表

Clojure 获取惰性列表前n项的惰性列表,clojure,sequences,Clojure,Sequences,在Clojure,我有一个列表 [a, b, c, d] 我想从中提取一个新的无限元组列表 [ [a,b,c], [b,c,d], [c,d,a], [d,a,b], [a,b,c] ... ] 我正试图找出如何用内置的seq函数以一种纯函数的方式实现这一点 这是直截了当的,我还没有破解它吗?或者这实际上是一个难题?(在其他语言中,我会编写自己的循环迭代器,并跟踪许多状态。) 更新:还有,为什么有人投票反对 这可以使用和的组合来实现 不使用分区: (defn next-rotation [c

在Clojure,我有一个列表

[a, b, c, d]
我想从中提取一个新的无限元组列表

[ [a,b,c], [b,c,d], [c,d,a], [d,a,b], [a,b,c] ... ]
我正试图找出如何用内置的seq函数以一种纯函数的方式实现这一点

这是直截了当的,我还没有破解它吗?或者这实际上是一个难题?(在其他语言中,我会编写自己的循环迭代器,并跟踪许多状态。)


更新:还有,为什么有人投票反对

这可以使用和的组合来实现


不使用分区:

(defn next-rotation [coll]
  (take (count coll) (drop 1 (cycle coll))))

(defn tuples [n coll]
  (lazy-seq (cons (take n coll) (tuples n (next-rotation coll)))))

;; (take 5 (tuples 3 '(a b c d))) ;; =>
;; ((a b c) (b c d) (c d a) (d a b) (a b c))

我认为否决票是因为你没有展示你到目前为止所做的事情。
(以5(分区3 1(循环)(AB c d)))
谢谢@Kyle。我不知道分区的三参数版本。@m0skit0我尝试了很多不同的组合。然后在它们不起作用的时候把它们扔掉。我假设如果有人知道正确的方法,他们不一定想要或需要看到我所有失败的尝试。如果我对此投了反对票,那可能是因为你的标题与你的问题描述根本不匹配:从惰性序列中获取前N项的方法就是
获取
!阅读您的输入+输出示例时,我试图将其与您的解释相协调,但感到十分困惑。
(defn next-rotation [coll]
  (take (count coll) (drop 1 (cycle coll))))

(defn tuples [n coll]
  (lazy-seq (cons (take n coll) (tuples n (next-rotation coll)))))

;; (take 5 (tuples 3 '(a b c d))) ;; =>
;; ((a b c) (b c d) (c d a) (d a b) (a b c))