【发布时间】:2019-03-31 11:07:48
【问题描述】:
这里是clojurescript中partition函数的implementation。为简单起见,删除了其他方法。
我很难理解lazy-seq 是如何累积结果的。最后有一个when,如果我理解正确,如果测试为假,它将返回nil。 nil 在 lazy-seq 的下一次迭代中会去哪里?
(defn partition
"Returns a lazy sequence of lists of n items each, at offsets step
apart. If step is not supplied, defaults to n, i.e. the partitions
do not overlap. If a pad collection is supplied, use its elements as
necessary to complete last partition up to n items. In case there are
not enough padding elements, return a partition with less than n items."
;; ...
([n step coll]
(lazy-seq
(when-let [s (seq coll)]
(let [p (take n s)]
(when (== n (count p))
(cons p (partition n step (drop step s))))))))
;; ...
【问题讨论】:
标签: clojure clojurescript lazy-sequences