How to cast a character to int in Clojure?
I am trying to write a rot 13 in clojure, so I need to have something to cast my char to int. I found something called (int), so I put:
(int a)
Get: CompilerException java.lang.RuntimeException: Unable to resolve symbol: a in this context, compiling:(NO_SOURCE_PATH:13:1)
Then I put:
(int 'a)
Get: ClassCastException clojure.lang.Symbol cannot be cast to `java.lang.Character clojure.lang.RT.intCast (RT.java:1087)
Then:
(rot13 ''a')
Get: ClassCastException clojure.lang.PersistentList cannot be cast to java.lang.Character clojure.lang.RT.intCast (RT.java:1087)
And:
(rot13 "a")
Get:
ClassCastException java.lang.String cannot be cast to java.lang.Character clojure.lang.RT.intCast (RT.java:1087)
So what is the right way to do it?
btw, I always get confused with all these clojure syntax. But I can never find any source only help me with my problem. Any suggestions? Thank you!!
Clojure will convert characters to int automatically if you ask nicely. It will convert it using ascii equivalence (well unicode in fact).
(int \a);;=>97
(int \b);;=>98
(int \c);;=>99
However, if you want to convert a Clojure char that is also a number to an int or long :
(Character/digit \1 10) ;; => 1
(Character/digit \2 10) ;; => 2
A non-digit char will be converted to -1
:
(Character/digit \a 10) ;;=> -1
Which is ok in this case, since \-1
is not a character.
(Character/digit \-1 10);;=>java.lang.RuntimeException: Unsupported character: \-1
It could be convenient also to note that -
would convert to -1
, although I wound not rely on it too much :
(Character/digit \- 10);;=>-1
The second parameter is obviously the base. Ex :
(Character/digit \A 16);;=>10
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With