部分与;(首先(在clojure中过滤?

部分与;(首先(在clojure中过滤?,clojure,Clojure,我看到有人建议可以使用一些来代替(首先(过滤),但我对它们的工作方式不一致感到困惑。有人能解释一下为什么这不会产生相同的结果吗 (some (comp #{:fu} :id) [{:id :fu :baz :bar}]) > :fu (first (filter (comp #{:fu} :id) [{:id :fu :baz :bar}])) > {:id :fu, :baz :bar} 是否有其他惯用且不太冗长的方法来执行(首先(过滤,即获取满足谓词的第一项?这两种用法在语义

我看到有人建议可以使用
一些
来代替
(首先(过滤
),但我对它们的工作方式不一致感到困惑。有人能解释一下为什么这不会产生相同的结果吗

(some (comp #{:fu} :id) [{:id :fu :baz :bar}])
> :fu

(first (filter (comp #{:fu} :id) [{:id :fu :baz :bar}]))
> {:id :fu, :baz :bar}

是否有其他惯用且不太冗长的方法来执行
(首先(过滤
,即获取满足谓词的第一项?

这两种用法在语义上并不等价;每种用法都有自己独特的用例


这将根据返回过滤后的项目


当且仅当项目通过筛选时,此操作返回筛选前的项目状态。之所以如此,是因为它不会以任何方式对项目进行变异,除非排除筛选函数拒绝的项目

(some (comp #{:fu} :id) [{:id :fu :baz :bar}])
> :fu
(first (filter (comp #{:fu} :id) [{:id :fu :baz :bar}]))
> {:id :fu, :baz :bar}