假设我有一个名为process
的函数,我只想应用于序列元素的一个子集my-sequence
,然后只返回原始序列的子集。元素处理。
如果我(map process (filter my-pred my-sequence))
,我只会留下经处理的元素。
相反,我可以(map #(if (pred %) (process %) %) my-sequence)
。
有没有更惯用/简洁的方法来做到这一点?
答案 0 :(得分:3)
我同意@schechecheck的评论,即你的解决方案是关于你会得到的好。但是,有一点我建议。我发现无论何时我做任何与map
远程复杂的事情,使用for
通常更美观。 E.g:
(map #(if (pred %) (process %) %) my-sequence)
变为
(for [x my-sequence]
(if (pred x) (process x) x))
由于map
和for
都会产生延迟序列,因此这些序列应该是等效的。