Clojure:处理过滤后的元素列表并将它们与列表的其余部分重新组合,寻找更惯用的解决方案



假设我有一个名为 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))

由于mapfor都生成惰性序列,因此它们应该是等效的。

最新更新