Clojure 获取惰性列表前n项的惰性列表
在Clojure,我有一个列表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
[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))