在 Scheme 中,我如何将一个精确的(有理的)数字分成被除数和除数?

Posted

技术标签:

【中文标题】在 Scheme 中,我如何将一个精确的(有理的)数字分成被除数和除数?【英文标题】:In Scheme how can I split an exact (rational) number into dividend and divisor? 【发布时间】:2014-04-18 07:43:17 【问题描述】:

我正在寻找的功能是这样的:

(split 1/3) => (1 . 3)
(split 1093/209) => (1093 . 209)

是否可以在 RnRS、SRFI 或任何自定义实现中实现?

【问题讨论】:

【参考方案1】:

是的。要获得有理数的分子和分母,您可以使用两个程序:

(numerator (/ 6 4))    ⇒  3
(denominator (/ 6 4))  ⇒  2

因为它表明返回的值是最低的术语。 The report指定分母始终为正,0的分母定义为1。

这种行为已经很长时间没有改变了。我在 R3RS 中看到了相同的描述,直到最新的 R7RS,所以你可以期望它存在于今天存在的所有 Scheme 实现中。

只是为了好玩:

(define (split number)
  (cons (numerator number)
        (denominator number)))

【讨论】:

以上是关于在 Scheme 中,我如何将一个精确的(有理的)数字分成被除数和除数?的主要内容,如果未能解决你的问题,请参考以下文章

csharp 分数类的基础。可以用来精确地表示有理数。

用 GMP 解析十进制值?

$x^2+y^2=c^2$

如何在MIT / GNU Scheme中读取文本文件?

在 Scheme 标准中是不是存在这样的过程,如果存在,它是如何调用的?

URL Scheme:如何创建一个链接,该链接将在 Google Drive 应用程序中打开一个文档