0

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

如果 I (map process (filter my-pred my-sequence)),我将只剩下处理过的元素。

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

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

4

1 回答 1

3

我同意@soulcheck 的评论,即你的解决方案是好的,你会得到的。但是,我要建议一件事。我发现每当我用 做任何复杂的事情时,使用 a来代替map通常在美学上更令人愉悦。for例如:

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

变成

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

由于两者都map产生for惰性序列,因此它们应该是等价的。

于 2013-09-16T15:24:43.473 回答