如何在Clojure中将long int转换为Rational?
这不起作用:
user> (class (/ 5 1))
java.long.Long
答案 0 :(得分:5)
您不需要明确地将长期转化为理性。
Clojure将转换
clojure.lang.Ratio
)成长(java.lang.Long
)当可以时:分母是或可以成为1
; 1
的分母时。 因此
(type (/ 4 2))
; java.lang.Long
(type (/ 4 3))
; clojure.lang.Ratio
答案 1 :(得分:3)
有rationalize
。但这并不能达到你想要的效果 - 如果分母为1,它仍会返回long。但是,如果你想将它用于类型测试目的,那么Clojure函数rational?
对于long来说将返回true。
如果您真的想要比率类型,我认为您必须自己编写,因为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)))