【问题标题】:why Clojure conatins? behave so strangely? [duplicate]为什么选择 Clojure conatins?表现得这么奇怪? [复制]
【发布时间】:2022-01-10 10:13:02
【问题描述】:

为什么clojure第一个输出true,第二个输出false

(def myset [3 5 7 11 13 17 19])
(defn check-n
[n]
(contains? myset n))

(check-n 1)
(check-n 20)

【问题讨论】:

  • myset 是一个向量,而不是一个集合。如果它是一个集合,你会得到你期望的输出。

标签: clojure


【解决方案1】:

contains? 是用于检查集合中的键的功能。它可以与地图一起使用:

(contains? {:a 1 :b 2} :a)
=> true
(contains? {:a 1 :b 2} :c)
=> false

或者使用vector-在这种情况下,它检查vector是否包含给定的index

(contains? [1 2 3] 0)
=> true
(contains? [1 2 3] 3)
=> false

如果要检查数字的出现,请使用 Java 中的.contains

(.contains [1 2 3] 3)
=> true

some 使用集合作为谓词:

(some #{3} [1 2 3])
=> 3
(some #{4} [1 2 3])
=> nil

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-07
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2013-05-12
    相关资源
    最近更新 更多