clojure - 如何在 Clojure 中将一个字符转换为 int?

标签 clojure functional-programming lisp

如何在 Clojure 中将字符转换为 int?

我正在尝试用 clojure 编写一个 rot 13,所以我需要一些东西来将我的 char 转换为 int。我发现了一个叫做 (int) 的东西,所以我输入:

(int a)

Get: CompilerException java.lang.RuntimeException: Unable to resolve symbol: a in this context, compiling:(NO_SOURCE_PATH:13:1)

然后我把:

(int 'a)

获取:ClassCastException clojure.lang.Symbol cannot be cast to `java.lang.Character clojure.lang.RT.intCast (RT.java:1087)

然后:

(rot13 ''a')

获取:ClassCastException clojure.lang.PersistentList 无法转换为 java.lang.Character clojure.lang.RT.intCast (RT.java:1087)

和:

(rot13 "a")

获取:

ClassCastException java.lang.String cannot be cast to java.lang.Character  clojure.lang.RT.intCast (RT.java:1087)

那么正确的做法是什么?

顺便说一句,我总是对所有这些 clojure 语法感到困惑。但我永远找不到任何资源只能帮助我解决我的问题。有什么建议么?谢谢!!

最佳答案

如果您请求得当,Clojure 会自动将字符转换为 int。它将使用 ascii 等效项(实际上是 unicode)对其进行转换。

(int \a);;=>97
(int \b);;=>98
(int \c);;=>99

但是,如果您想将也是数字的 Clojure char 转换为 int 或 long:

(Character/digit \1 10) ;; => 1
(Character/digit \2 10) ;; => 2

非数字字符将被转换为 -1 :

(Character/digit \a 10) ;;=> -1

在这种情况下没问题,因为 \-1 不是一个字符。

(Character/digit \-1 10);;=>java.lang.RuntimeException: Unsupported character: \-1

注意到 - 会转换为 -1 也很方便,尽管我不太依赖它:

(Character/digit \- 10);;=>-1

第二个参数显然是base。例如:

(Character/digit \A 16);;=>10

关于clojure - 如何在 Clojure 中将一个字符转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749624/

相关文章:

lambda - 使用 JDK8 和 lambda 压缩流 (java.util.stream.Streams.zip)

lisp - 一棵树中的原子数

list - 生成组合

javascript - 如何使蹦床适应持续传递风格?

macros - lisp 宏乘法在看到 0 时停止计算

netbeans - 使用Netbeans 7.0 Enclojure 1.5的 "hello world"

Clojure Spec vs Typed vs Schema

clojure - 通过连接集合创建惰性序列

clojure - 如何获取具有统一命名空间键的映射的命名空间?

c++ - "Deep"使用模板元编程在 C++ 中进行函数柯里化(Currying)