假设我有一个名为 process
的函数,我只想应用于序列元素的子集,my-sequence
然后返回仅处理元素子集的原始序列。
如果我(map process (filter my-pred my-sequence))
,我将只剩下处理过的元素。
相反,我可以(map #(if (pred %) (process %) %) my-sequence)
.
有没有更惯用/简洁的方法可以做到这一点?
我同意@soulcheck的评论,即您的解决方案很好。但是,有一件事我想建议。我发现每当我用map
做任何甚至稍微复杂的事情时,使用for
通常更美观。例如:
(map #(if (pred %) (process %) %) my-sequence)
成为
(for [x my-sequence]
(if (pred x) (process x) x))
由于map
和for
都生成惰性序列,因此它们应该是等效的。