【发布时间】:2014-11-06 00:28:58
【问题描述】:
以整数分区问题为例,我可以编写如下代码输出正整数n的所有分区:
(defn foo
([n] (foo n n []))
([n k buf]
(if (zero? n)
(println buf)
(doseq [i (range 1 (inc (min n k)))]
(foo (- n i) i (conj buf i))))))
然后(foo 5) 输出:
[1 1 1 1 1]
[2 1 1 1]
[2 2 1]
[3 1 1]
[3 2]
[4 1]
[5]
问题是我如何编写一个函数bar 来生成包含此类结果的惰性序列?比如我想(bar 5)生成([1 1 1 1 1] [2 1 1 1] [2 2 1] [3 1 1] [3 2] [4 1] [5])。
【问题讨论】:
-
确实,如果您想一想惰性序列是如何工作的,您会发现能够将所有状态封装为
recur调用与拥有为延迟(延迟)执行而封装的状态! -
@CharlesDuffy 如果你给我一个这个问题的例子,我将不胜感激。
标签: recursion clojure lazy-sequences