2010-02-12 13 views
5

Sto provando a scrivere una funzione che controlla se un personaggio si trova all'interno di un determinato intervallo esadecimale.Come determinare se un personaggio si trova all'interno di un intervallo in Clojure?

sto cercando il codice riportato di seguito:

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

ottengo il seguente errore:

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

presumo perché il> = operatore si aspetta un numero, si cerca di digitare il cast .in java regolare, ho potuto solo fare:

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

risposta

8

esplicitamente convertirlo in un int prima

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

Caratteri non sono numeri in Clojure anche se è facile di gettarli nella caratteri con la funzione int.

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

Per calchi ai tipi primitivi è possibile utilizzare la funzione con il nome del tipo che si desidera (vedi (find-doC#"Coerce")).

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