【发布时间】:2014-09-24 06:03:03
【问题描述】:
我希望使用以下代码生成所有小于 10 的 2 的倍数
(filter #(< % 10) (iterate (partial + 2) 2))
预期输出:
(2 4 6 8)
但是,由于某种原因,repl 没有给出任何输出?
但是,下面的代码可以正常工作...
(filter #(< % 10) '(2 4 6 8 10 12 14 16))
我知道一个是惰性序列,一个是常规序列。这就是原因。但是,如果我想从惰性序列中过滤掉所有小于 10 的数字,我该如何克服这个问题...?
【问题讨论】:
-
有更简单的无休止的无用搜索:例如
(some neg? (range))。在您的示例中,这是实现永远不会返回的第五个元素的尝试。用(take 4 ... )包裹你的表达式,你会得到(2 4 6 8)。
标签: clojure