1

我想让我的球拍程序键入/球拍以加快速度。我的程序使用 Matrix 数据类型对矩阵进行操作。有人建议我使用数据类型 Fixnum。

我有一些矩阵,
(: X (Matrix Fixnum)) (define X (matrix [[0 1] [2 3]] : Fixnum))
这没关系。

但是,如果矩阵中的数字有小数,我会得到一个错误。
(: Y (Matrix Fixnum)) (define Y (matrix [[0 0.5] [1.5 2.5]] : Fixnum))

类型检查器:
预期类型不匹配:Fixnum
给定:Positive-Flonum in:0.5

Fixnum 是一种机器类型(我不完全理解这是什么;不确定它是否相关)。我知道 fixnum 仅限于 64 位。但是为什么 0.5(或任何小数,似乎)不能是 Fixnum?

4

1 回答 1

3

请阅读文档(http://docs.racket-lang.org/reference/numbers.html)。这是一段摘录:

fixnum 是一个精确整数,其二进制补码表示适合 32 位平台上的 31 位或 64 位平台上的 63 位

所以,不,fixnum 是一个整数。

请注意,Racket 中的 0.5 和 1/2 是不同的。0.5 是 Fl​​onum,而 1/2 是 Exact-Rational。


顺便说一句,我认为您不必提及“矩阵”。仅以下代码会导致类型错误。

#lang typed/racket

(: X Fixnum)
(define X 0.5)

当你试图理解一个程序时,最好尽可能地精简程序,这样你就可以很容易地理解正在发生的事情。

于 2015-12-27T10:14:43.460 回答