2010-02-12 7 views
5

J'essaie d'écrire une fonction qui vérifie si un caractère est dans une certaine plage hexadécimale.Comment déterminer si un personnage se trouve dans une plage de Clojure?

J'essaie le code ci-dessous:

(def current \s) 
(and (>= current (char 0x20)) (<= current (char 0xD7FF))) 

Je reçois l'erreur suivante:

java.lang.ClassCastException: java.lang.Character cannot be cast to 
java.lang.Number (NO_SOURCE_FILE:0) 

Je suppose que l'opérateur> = attend un certain nombre, il essaie de jeter le type .in java régulière, je pouvais faire:

(current >= 0x20) && (current <= 0xD7FF) 

Répondre

8

convertir explicitement à un int premier

(<= 0x20 (int current) 0xD7FF) 
3

Les caractères ne sont pas des nombres dans Clojure, mais il est facile de les transformer en caractères avec la fonction int.

(number? \a)  => false 
(number? 42)  => true 
(number? (int \a)) => true 

Pour moulages aux types primitifs vous pouvez utiliser la fonction avec le nom du type que vous voulez (voir (find-doC#"Coerce")).

(int (char 0x20)) 
(float ...) 
(map double [1 2 3 4]) 
....