在 Clojure 中,如何将长 int 转换为有理数



如何在 Clojure 中将长 int 转换为有理数?

这不起作用:

user> (class (/ 5 1))
java.long.Long

你不需要显式地将长整型转换为有理数。

克洛朱尔将转换

  • 一个有理数(clojure.lang.Ratio(变成一个长(java.lang.Long(,当它可以:当分母是或可以被制造为1时;
  • longs或其他ints在必须时进入有理数:当除法不能解析为1的分母时。

因此

(type (/ 4 2)) ; java.lang.Long

(type (/ 4 3)) ; clojure.lang.Ratio

rationalize .但这并不能满足您的要求 - 如果分母为 1,它仍然返回 long。但是,如果您希望将其用于类型测试目的,则 Clojure 函数rational?返回 true 表示长整型。

如果你真的想要 Ratio 类型,我认为你必须自己编写,因为rationalize源代码会立即潜入底层 Java。

(clojure.lang.Ratio.
   (. BigInteger (valueOf 3))
   (. BigInteger (valueOf 1)))
; 3/1

也许:

(defn myrationalize
   [num]
   (if (integer? num)
      (clojure.lang.Ratio.
         (. BigInteger (valueOf num))
         (. BigInteger (valueOf 1)))
      (rationalize num)))

相关内容

  • 没有找到相关文章

最新更新