Это происходит из-за порядка передачи аргументов contains?
по condp
- в качестве первого аргумента передается ключевое слово. Если вы создаете анонимную функцию, которая меняет порядок аргументов, она будет делать то, что вы хотите:
user=> (def xx {:symbols #{:a :b}})
user=> (condp #(contains? %2 %1) (:symbols xx) :a (prn "yes"))
"yes"
nil
Это соответствующая строка из строки документа condp
, объясняющая поведение порядка аргументов:
Для каждого предложения оценивается (pred test-expr expr).