我还没有听说过,大多数语言似乎只是整数除法或浮点数。是否发现它是方案中的问题,因此未在其他语言中使用?
问问题
239 次
4 回答
4
普通 Lisp:
CL-USER> (+ 4/5 3/2)
23/10
因素:
( scratchpad ) 4/5 3/2 + .
23/10
哈斯克尔 98:
Prelude> (4/5) + (3/2) :: Rational
23 % 10
于 2011-06-14T13:16:40.897 回答
4
你问的是分数吗?如果是这样,Smalltalk 有它们:
(4/5) + (3/2)
评估为:
(23/10)
于 2011-06-13T09:43:10.497 回答
3
您问:“是否发现它是方案中的问题,因此未在其他语言中使用?” 答案是“不”,但这是一个有趣的问题。从广义上讲,Scheme/Racket 可能是一个语言家族的象征,当在“正确”和“易于实现”之间进行选择时,每次都选择“正确”。许多其他语言所做的选择是将数字的表示显式公开为小型有限集的元素,并要求程序员在该领域内进行操作。Scheme/Racket 提供了一种可以处理任意大数字的表示,仅受评估代码的机器的内存限制。这与几乎所有现代编程语言使用垃圾收集的决定没有什么不同,
正如克里斯指出的那样,将数字表示为有理数几乎总是与“bignums”密切相关。有很多语言支持 bignums——Scheme、Racket、Ruby、Python 等——当然,任何图灵完备的语言都可以扩展来处理 bignums,包括 C。
于 2011-06-15T19:55:55.830 回答
2
Scheme 的理性有大佬支持。大多数语言没有内置的 bignums。
在我看来,没有内置 bignums 的内置有理数是没有意义的,因为没有 bignums,你在某个点之后开始失去精度,你还不如通过使用浮点来预先考虑损失。
于 2011-06-13T11:15:18.723 回答