gpt4 book ai didi

clojure - Clojure 中 BigInt 与 BigInteger 的用例

转载 作者:行者123 更新时间:2023-12-03 00:41:03 25 4
gpt4 key购买 nike

我正在寻找有关何时在 Clojure 中使用 Clojure BigInt 与 Java BigInteger 的指南。两者都工作得很好,我假设使用 BigInt 的主要原因是利用 += 等运算符,这些运算符必须通过 Java 实例访问例如,方法 .add.equals。但有一些运算符,例如 isProbablePrime,我只能从 BigInteger 访问。

从 BigInt 转换到 BigInteger 似乎很容易,反之亦然,但是两者的存在使我不清楚用例。我的本能 react 就是在缺乏明确标准的情况下坚持使用 BigInteger,因为一些建议的用法似乎不起作用。来自 clojuredocs here :

user=> (def x (bigint 97))
user=> (.isProbablePrime x 1)
IllegalArgumentException No matching method found: isProbablePrime for class
clojure.lang.BigInt clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)

最佳答案

在 C. Emerick 等人的“Clojure 编程”中。 al.,第 428 页,有一个侧边栏主题,“当 Java 已经在 BigInteger 中提供一个类时,为什么 Clojure 有自己的 BigInt 类?”

他们指出了更喜欢 BigInt 而不是 Java 的 BigInteger 的两个原因。首先,后者的.hashCode实现与Long不一致(每种类型表达的相同数字给出不同的哈希值)。在比较例如中的等效值时,这通常不是您想要的。 HashMap 。

另一个原因是 BigInt 已优化为尽可能使用原始类型,因此在许多情况下性能应该会更好。

我会使用 Clojure 的数字类型,除非您有充分的理由不这样做(您使用 .isProbablePrime 表明您可能有足够的理由)。

关于clojure - Clojure 中 BigInt 与 BigInteger 的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com