3

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))
4

2 に答える 2

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)))
于 2013-09-04T22:35:47.893 に答える
3

int文字が特定の範囲内にあるかどうかを確認したい場合は、強制を使用できます。

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

Character.isDigitまたは、確認する必要があるのが数字だけの場合は、メソッドを直接呼び出すこともできます。明らかに、事前定義された文字クラスではない範囲では機能しません。

于 2013-09-04T21:55:21.207 に答える