Как определить, является ли символ буквой ASCII в верхнем регистре в Clojure У меня получилось так: (\$ \# \A \( \* \& \9 \8 \7 \Z \f) Я хочу отфильтровать в нем прописные буквы ASCII, такие как \A и\Z Я попытался найти стандартную библиотеку, но не повезло. Может кто-нибудь мне помочь? Ответ 1 Используйте следующие (filter #(Character/isUpperCase %) `(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) Результаты: (\A \Z) Ответ 2 Мое решение: (filter (set (map char (range 65 91))) '(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) Возврат: '(\A \Z) Ответ 3 Или вы также можете использовать re-seq и регулярные выражения: ((fn [x] (seq (apply str (re-seq #"[A-Z]" (apply str x))))) '(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) который также возвращает (\A \Z). Ответ 4 Это более подробно, но вы также можете определить свою собственную функцию: (defn cap-detector [x] (loop [res [] arg (apply str x)] (cond (empty? arg) (filter (fn [x] (Character/isLetter x)) res) :else (if (= (clojure.string/upper-case (first arg)) (str (first arg))) (recur (conj res (first arg)) (rest arg)) (recur res (rest arg)))))) И вызов cap-detector с вашей последовательностью символов даст вам то, что вы хотите: (cap-detector '(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) = > (\ A\Z)
Ответ 1 Используйте следующие (filter #(Character/isUpperCase %) `(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) Результаты: (\A \Z)
Ответ 2 Мое решение: (filter (set (map char (range 65 91))) '(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) Возврат: '(\A \Z)
Ответ 3 Или вы также можете использовать re-seq и регулярные выражения: ((fn [x] (seq (apply str (re-seq #"[A-Z]" (apply str x))))) '(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) который также возвращает (\A \Z).
Ответ 4 Это более подробно, но вы также можете определить свою собственную функцию: (defn cap-detector [x] (loop [res [] arg (apply str x)] (cond (empty? arg) (filter (fn [x] (Character/isLetter x)) res) :else (if (= (clojure.string/upper-case (first arg)) (str (first arg))) (recur (conj res (first arg)) (rest arg)) (recur res (rest arg)))))) И вызов cap-detector с вашей последовательностью символов даст вам то, что вы хотите: (cap-detector '(\$ \# \A \( \* \& \9 \8 \7 \Z \f)) = > (\ A\Z)