Вот решение, использующее частоты для подсчета вхождений и фильтра для подсчета количества значений, которые встречаются только дважды:
(defn only-one-pair? [coll]
(->> coll
frequencies ; map with counts of each value in coll
(filter #(= (second %) 2)) ; Keep values that have 2 occurrences
count ; number of unique values with only 2 occurrences
(= 1))) ; true if only one unique val in coll with 2 occurrences
Что дает:
user=> (only-one-pair? '(2 1 4 4 4))
false
user=> (only-one-pair? '(2 2 4 5 7))
true
user=> (only-one-pair? '(1 2 3 4 5))
false
Промежуточные шаги в функции, чтобы понять, как она работает:
user=> (->> '(2 2 4 5 7) frequencies)
{2 2, 4 1, 5 1, 7 1}
user=> (->> '(2 2 4 5 7) frequencies (filter #(= (second %) 2)))
([2 2])
user=> (->> '(2 2 4 5 7) frequencies (filter #(= (second %) 2)) count)
1
Согласно предложению, функция может использовать более описательное имя, и также рекомендуется использовать предикатные функции a? в конце этого в Clojure. Так может быть что-то вроде только одна пара? лучше, чем просто проверить.