Scheme中什么时候有理谓词产生false ?



如果(rational? (sqrt 2))为真,rational?谓词何时有用?

我明白,由于数字的表示不精确,限定有理数/无理数的问题变得复杂。无论如何,谓词是存在的。

在使用数学无理数的浮点表示的实现中,除了无穷大或NaN之外的任何数字都将是有理数,因为浮点值本质上是一个以2为分母的分数。基本上,π和(sqrt 2)等无理数实际上是这些系统中的有理数近似值。

rational?谓词是为了完备性而提供的,以允许无理数的其他可能表示,例如连分式。我不认为有任何像这样的实际实现,它只是理论上的。

如果一个数字是有理数,即n/m形式的数字,其中n和m是整数,且m不为零,则rational?谓词返回true。这意味着,正如Barmar所说,对于浮点数它必须返回true(假设正常的浮点数表示),因为浮点数实际上是有理数。

但是有一个非常重要的情况,rational?必须返回false:复数。复数是而不是有理数。所以对于任何有复数的实现,rational?将返回false

> (rational? 1+2i)
#f
> (number? 1+2i)
#t
> (complex? 1+2i)
#t
> (real? 1+2i)
#f
> (exact? 1+2i)
#t
> (complex? 1)
#t
> (rational? 1+0i)
#t

最新更新