2010-02-12 11 views
5

Estoy intentando escribir una función que comprueba si un carácter está dentro de un cierto rango hexadecimal.¿Cómo puedo determinar si un personaje está dentro de un rango en Clojure?

Estoy intentando el código que se muestra a continuación:

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

me sale el siguiente error:

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

supongo que porque el operador> = espera un número, se trata con el tipo echarlo .En java regular, tan sólo pudiera hacer:

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

Respuesta

8

explícitamente convertirlo en un primer int

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

Los caracteres no son números en Clojure, aunque es fácil convertirlos en caracteres con la función int.

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

para lances a tipos primitivos se puede utilizar la función con el nombre del tipo que desee (ver (find-doC#"Coerce")).

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