假设我有一个字符串集合,我想返回所有长度超过 4 个字符的字符串,首先按最短字符串排序。
您可以通过以下方式解决该问题:
(def strings ["this" "is" "super" "cool" "everybody" "isn't" "clojure" "great!?!?"])
(sort-by count < (filter #(> (count %) 4) strings))
;; > ("super" "isn't" "clojure" "everybody" "great!?!?")
注意我们使用count
了两次。这在这里可能很好,但如果count
不是count
呢?如果我们真的宁愿不运行超过绝对必要的运行量,而不是count
调用它会怎样?super-expensive-function
所以:
- 我们有很多东西
- 我们想要返回一个有序的集合
- 使用计算量大的函数的结果进行过滤和排序,每个事物只能调用一次
是否有执行此操作的现有功能,或者我需要构建自己的功能?