Vector (方案)从数字中去掉小数(即42.0->;42)

Vector (方案)从数字中去掉小数(即42.0->;42),vector,scheme,decimal,racket,Vector,Scheme,Decimal,Racket,我有一个700000大小的向量,里面全是零。我正在尝试将索引中的值更改为1。我通过计算得到指数。代码如下: #lang racket ; Make bitvector (define bitvector (make-vector 700000 0)) ; Fill indices (define fillvector (lambda (hashlist dict) (cond [(null? hashlist) (cdr dict)] [(null? dict

我有一个700000大小的向量,里面全是零。我正在尝试将索引中的值更改为1。我通过计算得到指数。代码如下:

#lang racket

; Make bitvector
(define bitvector (make-vector 700000 0))

; Fill indices
(define fillvector
  (lambda (hashlist dict)
    (cond [(null? hashlist) (cdr dict)]
          [(null? dict) '()]
          [else (vector-set! bitvector ((car hashlist) (car dict)) 1) (fillvector (cdr hashlist) dict)]
    )
))
我像这样调用
fillvector
(fillvector hashfl-1字典)<代码>字典是一组单词:

(define dictionary '( (h e l l o)
                      (w a y)
                      (r a i n b o w) ))
我在运行该命令后出现此错误:

vector-set!: contract violation
  expected: exact-nonnegative-integer?
  given: 415458.0
  argument position: 2nd
  other arguments...:
   '#(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
   1

我相信这个错误是因为乘法方法可以返回一个十进制值(尽管我确保它总是.0)。还有什么我能做的吗?任何帮助都将不胜感激,谢谢

将浮点数(“不精确”)转换为非浮点数(“精确”)的过程是
不精确->精确
(或R6RS和R7RS中的
精确

> (inexact->exact 415458.0)
415458