Clojure:比较字符

时间:2013-09-04 21:42:22

标签: clojure

在C ++世界中,我可以这样做(字符具有可比性):

bool isDigit(char c) {
  return '0' <= c && c <= '9';
}

在Clojure中,我可以比较相等,但可以比较少:

(= \a \b) ; [compiles] false
(< \a \b) ; java.lang.Character cannot be cast to java.lang.Number

如何在Clojure中实现这一点?如何检查范围内的角色?我可以用这样的重量级风格做到这一点:

(defn isDigit [c] (#{\0 \1 \2 \3 \4 \5 \6 \7 \8 \9} c))

2 个答案:

答案 0 :(得分:3)

如果你想检查角色是否属于某个范围,你可以使用int强制:

(let [zero (int \0)
      nine (int \9)]
  (defn is-digit? [c] (<= zero (int c) nine)))

或者,您可以直接调用Character.isDigit方法,如果您需要检查的是数字。显然,这不适用于非预定义字符类的范围。

答案 1 :(得分:3)

(defn digit? [c] (and (>= 0 (compare \0 c)) 
                      (>= 0 (compare c \9))))

(defn digit?? [c] (= (java.lang.Character/getType ^Character c)
                     (java.lang.Character/DECIMAL_DIGIT_NUMBER)))

(defn digit??? [c] (re-find #"\d" (str c)))