为什么(condp contains?(:符号xx):a(prn“是”)给出contains?不支持类型:clojure.lang.Keyword错误?

为什么(condp contains?(:符号xx):a(prn“是”)给出contains?不支持类型:clojure.lang.Keyword错误?,clojure,Clojure,我想用condp解决一个问题 这就是我试图用condp检查的内容 (def xx {:symbols {:a 1}}) (contains? (:symbols xx) :a) true 但是我得到了这个错误 (condp contains? (:symbols xx) :a (prn "yes")) IllegalArgumentException contains? not supported on type: clojure.lang.Keyword clojure.l

我想用condp解决一个问题

这就是我试图用condp检查的内容

(def xx {:symbols {:a 1}})

(contains? (:symbols xx) :a)

true
但是我得到了这个错误

(condp contains? (:symbols xx) :a (prn "yes"))

IllegalArgumentException contains? not supported on type:     
clojure.lang.Keyword  clojure.lang.RT.contains

这是由于传递给
contains?
by的参数的顺序-它将关键字作为第一个参数传递。如果您创建一个交换参数顺序的匿名函数,它将执行您想要的操作:

user=> (def xx {:symbols #{:a :b}})
user=> (condp #(contains? %2 %1) (:symbols xx) :a (prn "yes"))
"yes"
nil
这是
condp
doc字符串中解释参数顺序行为的相关行:

对于每一个条款,(pred test expr expr)进行评估


请将您的问题更新为
xx
谢谢您回答@TaylorWood!!