Clojure 中返回 true 或 false 的“some”的替代函数

zma*_*ten 2 clojure

我想检查列表中的任何元素是否满足给定条件。我尝试过使用some,它返回truenil,但似乎找不到具有类似功能的函数来检索true/false

示例 - 检查列表中是否有 6:

(some #(= 6 %) numbers-list))

Erw*_*ers 5

我认为这是最惯用的方法(使用 set 作为函数),但这确实返回nil或值本身:

(some #{6} [1 2 3 4 5 6 7])
;; => 6
Run Code Online (Sandbox Code Playgroud)

正如对您的问题的评论中提到的,可以使用将其转换为布尔值boolean

返回布尔值的其他方法是转换为集合并使用contains?返回布尔值:

(contains? (set [1 2 3 4 5 6 7]) 6)
;; => true
Run Code Online (Sandbox Code Playgroud)

(因为contains?“对于向量和 Java 数组等数字索引集合,...测试数字键是否在索引范围内。”)是否需要额外的转换。

或者类似地使用 Java 互操作(但也适用于向量和列表):

(.contains [1 2 3 4 5 6 7] 6)
;; => true
Run Code Online (Sandbox Code Playgroud)

另请参阅测试列表是否包含 Clojure 中的特定值