【发布时间】:2018-09-14 13:22:20
【问题描述】:
我正在学习clojure。在解决其中一个问题时,我不得不使用first + filter。我注意到过滤器对所有输入都不必要地运行。
我怎样才能让filter 懒惰地运行,这样它就不需要为整个输入应用谓词。
下面是一个不偷懒的例子,
(defn filter-even
[n]
(println n)
(= (mod n 2) 0))
(first (filter filter-even (range 1 4)))
上面的代码打印出来
1
2
3
而它不需要超出2。我们怎样才能让它变得懒惰?
【问题讨论】:
-
您可以考虑使用
some而不是(first (filter ...))