keep

(keep f coll)

对于 coll 中的每个项 item(keep f coll) 返回一个惰性序列, 序列包含 (f item)nil 之外的所有计算结果。

因为带副作用的函数会返回与计算结果无关的虚假值, 因此,为了确保虚假值不会混进 keep 所生成的惰性序列中, f 必须是一个无副作用的函数。

user=> (keep inc [1 2 3])
(2 3 4)

; 将空的 collection 传给 seq 函数会返回 nil
; 可以根据这个性质来测试 keep
; 看它是否真的会省略等于 nil 的值

user=> (seq [])
nil

user=> (keep seq (list [1 2 3] [] [4 5 6]))
((1 2 3) (4 5 6))

讨论

comments powered by Disqus

Previous topic

keep-indexed

Next topic

key