为什么Clojure中的(/ 1/2)等于2N?

时间:2016-02-26 16:48:43

标签: clojure division bigint

前几天在Clojure repl中玩游戏,我遇到了这个。

user=> (/ 1/2)
2N

所以我尝试了这个:

user=> (type (/ 1/2)) 
clojure.lang.BigInt

有人知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:5)

1/2创建Ratio/函数最终调用(clojure.lang.Numbers/divide 1 1/2)。如果你看一下这个定义,它最终会调用(clojure.lang.Numbers$RatioOps/divide 1 1/2)。这会将1L提升为一个比率,执行比率除法,然后将2/1的结果简化为BigInt 2。