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

时间:2013-09-16 10:17:22

标签: clojure

假设我有一个名为process的函数,我只想应用于序列元素的一个子集my-sequence,然后只返回原始序列的子集。元素处理。

如果我(map process (filter my-pred my-sequence)),我只会留下经处理的元素。

相反,我可以(map #(if (pred %) (process %) %) my-sequence)

有没有更惯用/简洁的方法来做到这一点?

1 个答案:

答案 0 :(得分:3)

我同意@schechecheck的评论,即你的解决方案是关于你会得到的好。但是,有一点我建议。我发现无论何时我做任何与map远程复杂的事情,使用for通常更美观。 E.g:

(map #(if (pred %) (process %) %) my-sequence)

变为

(for [x my-sequence]
  (if (pred x) (process x) x))

由于mapfor都会产生延迟序列,因此这些序列应该是等效的。